Ich habe mich ein wenig mehr damit beschäftigt, also werde ich wohl mal meine eigene Frage beantworten. Hier ist wieder unser limacon.

der limacon $\gamma(t)$

Beachte, womit wir beginnen: ein Zeitparameter $t$, der in gleichen Schritten über das Intervall $$ läuft, die kumulierte Strecke $s$, die zum Zeitpunkt $t$ entlang der Bogenlänge zurückgelegt wurde, und die kartesischen Koordinaten des limacon $\gamma $ zum Zeitpunkt $t$. So viel haben wir in der Frage festgelegt. Was wir stattdessen wollen, ist ein Bogenlängenparameter $s$, der in gleichen Schritten über das Intervall $$ läuft, wobei $L$ die gesamte Bogenlänge ist, zusammen mit der Zeit $t(s)$ zum Zeitpunkt $s$ und den kartesischen Koordinaten $\gamma (t(s))$.

Echt schnell, machen wir die kumulative Strecke $s$, die entlang der Bogenlänge zurückgelegt wurde, mit derivative (File Exchange link) neu, damit wir keine Stichproben verlieren.

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

Wir werden die Matlab-Funktion interp1 verwenden, um die Zeitpunkte $t(s_i)$ und die Koordinaten $\gamma (t(s_i))$ zu interpolieren, die den gleichmäßig verteilten Schritten $s_i$ entlang der Bogenlänge entsprechen. Dementsprechend deklarieren wir die Argumente für interp1 mit den in der Dokumentation angegebenen Variablennamen. Der Vektor X ist der ursprüngliche $s_i$, d.h. die zum Zeitpunkt $t_i$ entlang der Bogenlänge zurückgelegte Strecke. Die Matrix V hat Spaltenvektoren, deren Zeilen $t_i$ (unser ursprünglicher Zeitparameter in gleicher Schrittweite) und die Koordinaten $\gamma (t_i)$ sind.

X = s.';V = ;

Wir müssen interpolieren, um die Zeitpunkte $t(s_i)$ zu finden, die gleichmäßig verteilten Bogenlängenschritten entlang der Kurve entsprechen. Diese gleichmäßig verteilten Schritte gehen von $s_0=0$ bis $s_N=L$, wobei $L$ die gesamte Bogenlänge ist.

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

Wir können überprüfen, dass s(N) == sum(diff(Xq)), wie es der Fall sein sollte. Wir verwenden die Fähigkeit der mehrdimensionalen stückweisen linearen Interpolation der Matlab-Interpolationsfunktion interp1, um interpolierte Werte für die Zeit $t(s_i)$ und die Koordinaten $\gamma (t(s_i))$ zu finden, die den in Xq angegebenen gleichmäßigen Schritten von $s_i$ entsprechen.

Vq = interp1(X,V,Xq); 

Ein Aufruf von diff(Xq) zeigt, dass wir uns in Schritten mit konstanter Bogenlänge entlang $\gamma $ bewegen, während ein Aufruf von diff(Vq) zeigt, dass die Zeitschritte nicht mehr gleich sind (erste Spalte). Das Ergebnis unserer Interpolation ist also:

  • Bogenlänge $s_i$ in konstanten Schritten (Xq)
  • entsprechende Zeitpunkte $t_i$, nicht mehr in konstanten Schritten (erste Spalte von Vq)
  • Koordinaten $\gamma(t(s))$ als Funktion der Bogenlänge (zweite und dritte Spalte von Vq)

So wird die Bogenlängenparametrisierung des Limakons $\gamma (t(s))$ in kartesischen Koordinaten als xs und ys ausgedrückt.

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

Diese Vektoren geben die Position eines sich entlang $\gamma $ bewegenden Teilchens in Abhängigkeit von $s$ an, wobei $s$ in Schritten von 0.1058 zunimmt. Hier sind die beiden Parametrisierungen der Kurve $\gamma $, nämlich $\gamma (t)$ in blau und $\gamma (t(s))$ in rot.

zwei Parametrisierungen

Ich werde noch etwas mehr Arbeit leisten müssen, wenn ich periodische Lösungen zulassen will, da das aktuelle Matlab-Skript dies im Allgemeinen nicht tut. Um dies zu sehen, betrachten Sie einfach den Abstand zwischen der letzten und der ersten Probe von $\gamma (t(s))$ in Rot oben. Wenn wir einen weiteren Schritt von 0.1058 Einheiten entlang des Limakons machen würden, würden wir nicht auf einem Punkt landen, den wir bereits besucht haben, obwohl wir wissen, dass Limakons $2\pi$-periodisch sind. Ich denke, dass dies im Grunde darauf hinausläuft, eine andere Schrittweite für $s$ zu wählen als 0.1058.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.