2011-10-08 595 views

回答

0

像@Nzbuu說的,很難知道你想要你的波浪線是什麼樣子。以下函數將繪製一個正弦曲線在2個點之間的當前圖形上,並指定週期和幅度。如果您對波浪的定義與我的定義不同,只需更改xxyy以描述您在[0,0][1,1]之間的波浪線。

function wavyline(pt1, pt2) 
% first, create a "unit" wavy line segment 
xx = [0:.01:1]; 
reps = 5 % how many periods of sine you want 
widthRatio = 0.2 % height of peaks/lenght of line 
yy = (widthRatio/2)*sin(reps*xx*2*pi); 

% stretch our unit wavy line to be the proper length 
dx = pt2(1) - pt1(1); 
dy = pt2(2) - pt1(2); 
len = sqrt(dx*dx+dy*dy); 
xx = len*xx; 

% now rotate it 
th = atan2(dy, dx); 
R = [cos(th), -sin(th); sin(th), cos(th)]; 
rotatedPts = R * [xx;yy]; 

% finally, shift it to start at pt1, and plot 
shiftedPts = rotatedPts + [pt1(1); pt1(2)] * ones(size(xx)); 
plot(shiftedPts(1,:), shiftedPts(2,:),'k') 

end 
+0

謝謝!這是我想到的。 – omarshammas

0

在MATLAB中沒有內置的功能來做到這一點。你必須編寫自己的函數來完成它。

對於其他人來說,寫一些通用的東西很困難,因爲它取決於你認爲「波浪」意味着什麼,以及你想要如何「波浪」。

0

看來你想要一個功率系列適合 - 至少,我假設「波浪」線,你的意思是像一個二次或立方或類似的適合。

這很好,但爲了合理安排一系列力量,你基本上需要一個比你適合的力量更多的限制。所以,如果你只有兩個點(或一個點和一個斜率),這意味着你只能適應x^1,這當然是線性擬合。

編輯:要回答你的問題,如果你可以得到更多的限制,你可能想要使用polyfit或類似的東西。搜索「matlab多項式擬合」可能會更好地回答你的問題。