绘制一条距离每个点指定距离的曲线(Matlab)
我试图画一条曲线,其中每个点彼此之间有特定的距离。 现在,blow显示了我想要做的,但我想要的是像sin一样的曲线,而不是恒定的半径绘制一条距离每个点指定距离的曲线(Matlab),matlab,plot,distance,points,curve,Matlab,Plot,Distance,Points,Curve,我试图画一条曲线,其中每个点彼此之间有特定的距离。 现在,blow显示了我想要做的,但我想要的是像sin一样的曲线,而不是恒定的半径 R = 50; %radius Gap = 0.1; % gap between points Curve = 180; rad = 0; n= pi*2*R*Curve/360/Gap; % n is length of arc th = linspace( pi, rad ,n);
R = 50; %radius
Gap = 0.1; % gap between points
Curve = 180;
rad = 0;
n= pi*2*R*Curve/360/Gap; % n is length of arc
th = linspace( pi, rad ,n);
x = R*cos(th)+R;
y = R*sin(th)+100;
PathDB.Route1.x(1:1001,1)=0;
PathDB.Route1.y = (0:Gap:100)';
LengthY = length(PathDB.Route1.y);
PathDB.Route1.x(1001:1001+length(x)-1,1)=x ;
PathDB.Route1.y(LengthY:LengthY+length(y)-1) = y;
LengthX = length(PathDB.Route1.x);
LengthY = length(PathDB.Route1.y);
PathDB.Route1.x(LengthX:LengthX+1000,1)=PathDB.Route1.x(LengthX,1);
PathDB.Route1.y(LengthY:LengthY+1000,1)= (PathDB.Route1.y(LengthY,1):-Gap:0);
plot(PathDB.Route1.x, PathDB.Route1.y);
grid ;
axis equal
我所要做的不是完美曲线,而是添加类似sin的曲线,用0.1绘制。
我很抱歉我的编码能力差,我希望你能理解并帮助我
任何建议都将不胜感激
Rui如果您想让它变得健壮,可能需要使用Matlab符号工具箱。如果你取一个函数f,想沿着它的曲线在a和b之间绘制等距点,你可以这样做(使用sin(x)作为示例函数): 下一步,我们将要迭代通过间隔来找到等距点。为此,我们取每个S_ij,其中i代表区间低端的x值,j代表高端。我们从i=a开始,当i=b时停止。利用弧长方程的逆解,我们可以求解j
Sdist==S_ij
Sdist=弧长(j)-弧长(i)=>Sdist+弧长(i)=弧长(j)
。使用这个,我们可以计算:j=弧长逆(Sdist+弧长(i))
。实现这一点的一种方法如下:
arc_length_inv = finverse(arc_length);
i=a
xvals(1)=i;
for ii=1:n
j = arc_length_inv(Sdist+arc_length(i)); %calculate high end
i = j %make high end new low end
xvals(ii+1)=i; %put new low end value in x array
end
使用此x值数组,可以计算yvals=sin(xvals)
和plot(xvals,yvals)
其中一些代码可能需要调整,但数学应该是合理的(弧长的公式来自)。从数学上讲,这适用于[a,b]上可积且弧长函数具有逆函数的任何函数;也就是说,我不知道int()和finverse()函数的功能
如果您不需要健壮性,您可以按照以下步骤操作特定函数,手动计算并手动输入函数 你说的罪恶是什么意思?你是说椭圆的吗?
arc_length_inv = finverse(arc_length);
i=a
xvals(1)=i;
for ii=1:n
j = arc_length_inv(Sdist+arc_length(i)); %calculate high end
i = j %make high end new low end
xvals(ii+1)=i; %put new low end value in x array
end