Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
绘制一条距离每个点指定距离的曲线(Matlab)_Matlab_Plot_Distance_Points_Curve - Fatal编程技术网

绘制一条距离每个点指定距离的曲线(Matlab)

绘制一条距离每个点指定距离的曲线(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);

我试图画一条曲线,其中每个点彼此之间有特定的距离。 现在,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);     
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