0

Matlab 内の 3D 空間で複数のポイント (場合によっては数千) を接続しようとしています。軌道は、任意の方向、任意の次元で前後に進むことができます。軌道の二次導関数は二次導関数にグリッチがあってはならないため、結果を5次で取得したいと思います。

matlab spline() 関数の問題は、x 値ごとに常に 1 つの 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 スプライン関数は、私の問題にまったく適していますか? 5次導関数で連続する必要があるという事実に関して、すべての次元ですべての方向に移動する必要があるという問題を回避することは可能ですか?

  2. そうでない場合は、どうすればよいですか?B-スプラインの問題は、入力ポイントを通過していないことです。友人は、次数 5 の多項式を使用してそれらを接続するだけでよいと言いました。彼は、すべての次元に対して個別にそれを行う必要があるようなことを言いました. 誰か私にそれを説明できますか?

ご協力いただきありがとうございます!

4

1 に答える 1