簡體   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