Am mai lucrat puțin la asta, așa că cred că voi încerca să răspund la propria întrebare. Iată din nou limconul nostru.

limconul $\gamma(t)$

Rețineți cu ce începem: un parametru de timp $t$ care se desfășoară în pași egali pe intervalul $$, distanța cumulată $s$ parcursă de-a lungul lungimii arcului la momentul $t$ și coordonatele carteziene ale limconului $\gamma$ la momentul $t$. Am stabilit toate acestea în întrebare. Ceea ce dorim în schimb este un parametru al lungimii arcului $s$ care se parcurge în pași egali pe intervalul $$, unde $L$ este lungimea totală a arcului, împreună cu timpul $t(s)$ la $s$ și coordonatele carteziene $\gamma (t(s))$.

Rapid de tot, să refacem distanța cumulată $s$ parcursă de-a lungul lungimii arcului cu derivative (link File Exchange) ca să nu pierdem eșantioane.

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

Vom folosi funcția Matlab interp1 pentru a interpola punctele de timp $t(s_i)$ și coordonatele $\gamma (t(s_i))$ care corespund unor pași $s_i$ la distanțe egale de-a lungul lungimii arcului. În consecință, declarăm argumentele pentru interp1 cu numele variabilelor date în documentația sa. Vectorul X este vectorul inițial $s_i$, adică distanța parcursă de-a lungul lungimii arcului la momentul $t_i$. Matricea V are vectori coloană ale căror rânduri sunt $t_i$ (parametrul nostru de timp original în pași de mărime egală) și coordonatele $\gamma (t_i)$.

X = s.';V = ;

Trebuie să interpolăm pentru a găsi punctele de timp $t(s_i)$ care corespund unor pași de lungime de arc la distanțe egale de-a lungul curbei. Acești pași echidistanți se întind de la $s_0=0$ la $s_N=L$, unde $L$ este lungimea totală a arcului.

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

Potem verifica că s(N) == sum(diff(Xq)), așa cum ar trebui să fie cazul. Utilizăm capacitatea de interpolare liniară multidimensională pe bucăți a funcției de interpolare interp1 din Matlab pentru a găsi valorile interpolate pentru timpul $t(s_i)$ și coordonatele $\gamma (t(s_i))$ care corespund pașilor egal distanțați ai lui $s_i$ date în Xq.

Vq = interp1(X,V,Xq); 

Un apel la diff(Xq) arată că ne deplasăm în pași de lungime de arc constantă de-a lungul lui $\gamma $, în timp ce un apel la diff(Vq) arată că pașii de timp nu mai sunt egali (prima coloană). Astfel, rezultatul interpolării noastre este:

  • lungimea arcului $s_i$ în pași constanți (Xq)
  • punctele de timp corespunzătoare $t_i$, nu mai sunt în pași constanți (prima coloană din Vq)
  • coordonate $\gamma(t(s))$ în funcție de lungimea arcului (a doua și a treia coloană din Vq)

Atunci parametrizarea lungimii arcului limaconului $\gamma (t(s))$ se exprimă în coordonate carteziene ca xs și ys.

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

Acești vectori dau poziția unei particule care se deplasează de-a lungul lui $\gamma $ în funcție de $s$, unde $s$ crește în pași de 0.1058. Iată cele două parametrizări ale curbei $\gamma $, și anume $\gamma (t)$ în albastru și $\gamma (t(s))$ în roșu.

două parametrizări

Va trebui să mai lucrez puțin dacă vreau să permit soluții periodice, deoarece actualul script Matlab nu o face în general. Pentru a vedea acest lucru, este suficient să vă uitați la distanța dintre ultimul și primul eșantion de $\gamma (t(s))$ cu roșu de mai sus. Dacă am avansa încă un pas de 0.1058 unități de-a lungul limaconului, nu am ateriza într-un punct pe care l-am vizitat deja, chiar dacă știm că limaconii sunt $2\pi$-periodice. Cred că acest lucru echivale practic cu alegerea unei mărimi a pasului pentru $s$ diferită de 0.1058.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.