これについてもう少し作業したので、私自身の質問に挑戦してみようかと思うのですが。

the limacon $gamma(t)$

Time parameter $t$ which runs in equal steps over the interval $$, the cumulative distance $s$ traveled along the arc length at time $t$, and the Cartesian coordinates of the limacon $gamma $ at time $t$ で始めることに注意してください。 ここまでは問題で設定した。 代わりに欲しいのは、区間$$を等間隔に走る弧長パラメータ$s$、$L$は弧長の合計、$s$での時間$t(s)$とデカルト座標$gamma (t(s))$です。

Real quick、サンプルを失わないようにderivative (File Exchange link) で$s$を弧長に沿った累積距離をやり直しましょう。

x_t = derivative(x);y_t = derivative(y);s = cumtrapz( sqrt(x_t.^2 + y_t.^2 ) );

ここで、Matlabの関数interp1を使って、円弧に沿った等間隔なステップ$s_i$に対応するタイムポイント$t(s_i)$と座標$gamma (t(s_i))$ を補間してみる。 従って、interp1の引数は、そのドキュメントに示された変数名で宣言する。 ベクトル X は元の $s_i$ 、すなわち時刻 $t_i$ に円弧長に沿って移動した距離である。 行列Vは、行が$t_i$(元の時間パラメータ、等ステップサイズ)、座標$gamma (t_i)$の列ベクトルである。

X = s.';V = ;

曲線に沿って等間隔に並ぶ円弧長のステップに対応する時間点$t(s_i)$を求めて、補間する必要がある。 この等間隔ステップは$s_0=0$から$s_N=L$までで、$L$は全弧長である。

L = s(end);s0 = s(1);N = length(s);Xq = linspace(s0,L,N); % equally spaced indices

本来はs(N) == sum(diff(Xq))と確認すればよいのである。 Matlabの補間関数interp1の多次元ピースワイズ線形補間機能を使って、Xqで与えた$s_i$の等間隔のステップに対応する時間$t(s_i)$と座標$gamma (t(s_i))$ を補間値として求める。

Vq = interp1(X,V,Xq); 

diff(Xq)を呼ぶと、$gamma $に沿って一定の弧長でステップ移動していることがわかり、diff(Vq)を呼ぶと、時間ステップがもはや等しくないことがわかる(1列目)。 したがって、補間の結果は次のようになる。

  • 弧の長さ $s_i$ を一定ステップで (Xq)
  • 対応するタイムポイント $t_i$, no longer in constant steps (first column of Vq)
  • coordinates $gamma(t(s))$ as function of arc length (second and third columns of Vq)

そこでリマトンの弧長パラメトリゼーション $gamma (t(s)) $ は直交座標では xsys として表現できるようになる。

xs = Vq(:,2);ys = Vq(:,3);

これらのベクトルは$s$の関数として$gamma $に沿って動く粒子の位置を与え、$s$は0.1058ステップで増加する。 ここで、曲線$gamma $の2つのパラメタリゼーション、すなわち青が$gamma (t)$、赤が$gamma (t(s))$である。

two parametrizations

現在のMatlabスクリプトは一般に周期解を許さないので、周期解を許したい場合はもう少し工夫する必要がありますね。 これを見るには、上の赤で示した$gamma (t(s))$の最後のサンプルと最初のサンプルの間の距離を見てみてください。 もし、リマコンに沿ってもう一歩0.1058単位進むと、リマコンが$2pi$-periodicであることを知っていても、すでに訪れた点には着地しないでしょう。 これは基本的に、$s$のステップサイズを0.1058.

とは異なるものを選ぶということになると思います。

コメントを残す

メールアドレスが公開されることはありません。