如何连接三维空间中的点?(Matlab)



我试图在Matlab中连接3D空间中的几个点(有时是数千个)。轨迹可以在任何方向上前进,也可以在任何维度上后退。我希望得到5阶的结果,因为轨迹的二阶导数在二阶导数中一定没有任何小故障。

matlab spline()函数的问题是,每个x值必须始终只有一个y值。我尝试了一个简单的2D例子,无穷大符号(Lemniscate)。

t = pi*[0:.1:2]; a = 1;
for i=1:size(t,2)
x(i) = a*sqrt(2)*cos(t(i))/(sin(t(i)).^2+1);
y(i) = a*sqrt(2)*cos(t(i))*sin(t(i))/(sin(t(i))^2+1);
end

这给我产生了21个点,如果连接起来的话,应该看起来像狐猴门。

绘制的21个点

现在更改第一条线,计算样条曲线并添加绘图

t = pi*[-1:.1:0];
[..]
xx = x(1):.1:x(end);
yy = spline(x,y,xx);
plot(x,y,'o',xx,yy)

这将产生以下图表。正如你所看到的,这相当不错。但正如所提到的,问题是,这只适用于x(i)<x(i+1)

前进的半个狐猴

所以现在这就引出了以下问题:

  1. Matlab样条函数是否适合我的问题?关于这个事实,它需要在五阶导数中是连续的,有可能解决这个问题吗,我有时需要在每个维度上,每个方向上?

  2. 如果没有,该怎么办?B样条线的问题是,它们不经过输入点。一个朋友提到我应该使用五阶多项式并将它们连接起来。他说,像我这样的人需要分别对每个维度进行处理。有人能向我解释吗?

感谢您的帮助!

我在以下代码的帮助下解决了这个问题(归功于另一个论坛上的这篇文章)

n=100; [x_t, y_t, tt] = ParametricSpline(x, y, n); 
xref = ppval(x_t, tt); yref = ppval(y_t, tt); 

具有功能

function [ x_t, y_t, t_t ] = ParametricSpline(x,y,n) 
m = length(x); 
t = zeros(m, 1); 
for i=2:m 
arc_length = sqrt((x(i)-x(i-1))^2 + (y(i)-y(i-1))^2); 
t(i) = t(i-1) + arc_length; 
end
t=t./t(length(t)); 
x_t = spline(t, x); 
y_t = spline(t, y); 
t_t = linspace(0,1,n); 
end

相关内容

  • 没有找到相关文章

最新更新