繁体   English   中英

如何在3D空间中连接点? (Matlab)

[英]How to connect points in a 3D space? (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分,如果连接起来应该看起来像lemniscate。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM