如何在Matlab中使用波浪线而不是直线连接两个点,如(1,1)和(2,2)?
我查看了功能线([1 2],[1 2]),但它没有提供这样的功能。
谢谢!
答案 0 :(得分:0)
MATLAB中没有内置功能来执行此操作。你必须编写自己的函数来完成它。
其他人很难写一些通用的东西,因为这取决于你认为“波浪”的含义以及你想要的“波浪”。
答案 1 :(得分:0)
看起来你想要一个电源系列 - 至少,我假设“波浪”线,你的意思是像二次或立方或类似的东西。
这很好,但为了明智地适应一个电源系列,你基本上需要一个比你适合的功率更多的约束。
所以,如果你只有两个点(或一个点和一个斜率),这意味着你只能适合x^1
,这当然是一个线性拟合。
编辑:要回答您的问题,如果您可以获得更多限制,您可能希望使用polyfit或类似的东西。谷歌搜索“matlab多项式拟合”可能会更好地回答你的问题。
答案 2 :(得分:0)
就像@Nzbuu说的那样,很难知道你希望你的波浪线看起来像什么。以下函数将在2个点之间绘制当前图形上的正弦曲线,并指定周期和幅度。如果您对波浪的定义与我的不同,只需更改xx
和yy
来描述[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