总体问题描述如下:
为了直观让问题更直观,可以采用下面这个分段函数作为路径。其中L的长度为2。
另附一个小问题:由于路径是离散点,所以可能求出来的B点可能不在这些离散点上面,那是不是可以通过spline差值来得到目标B点么??又或者说就把目标点B归为距离离散点较近的点的坐标又该怎么实现呢??
总体问题描述如下:
另附一个小问题:由于路径是离散点,所以可能求出来的B点可能不在这些离散点上面,那是不是可以通过spline差值来得到目标B点么??又或者说就把目标点B归为距离离散点较近的点的坐标又该怎么实现呢??
这个就这么做!
x = -pi:1:pi;%x自己设置
y = 3*sin(x);%y自己设置
x0 = 0.5;%某个点
y0 = 1;%某个点
L = 2;%距离为L
minF = @(xp)abs((spline(x,y,xp)-y0)^2+(xp-x0)^2-L^2);
[xp1, minFval] = fminsearch(minF, 1.5);%初值选1.5
yp1 = spline(x,y,xp1);
[xp2, minFval] = fminsearch(minF, 0);%初值选0
yp2 = spline(x,y,xp2);
plot(x,y,'b--s');
xx = linspace(min(x),max(x),101);
yy = spline(x,y,xx);
hold on
plot(xx,yy,'r-')
plot([x0,xp1],[y0,yp1],'g-o','markersize',5,'markerfacecolor','g')
plot([x0,xp2],[y0,yp2],'g-o','markersize',5,'markerfacecolor','g')
axis equal
plot(x0,y0,'ro','markersize',10,'markerfacecolor','r')
可以得到绿色的两个点到中间的给定的红色点(x0,y0)的距离都是L=2
这种方法非常简便有效,但是初值的选取很有讲究,自己好好探索哦