Pracoval jsem na tom trochu víc, takže se asi pokusím o vlastní dotaz. Tady je opět náš limacon.

limacon $\gamma(t)$

Všimněte si, čím začínáme: časovým parametrem $t$, který probíhá ve stejných krocích po intervalu $$, kumulativní vzdáleností $s$ ujetou po délce oblouku v čase $t$ a kartézskými souřadnicemi limaconu $\gamma $ v čase $t$. Tolik jsme stanovili v otázce. Místo toho chceme parametr délky oblouku $s$, který probíhá ve stejných krocích po intervalu $$, kde $L$ je celková délka oblouku, spolu s časem $t(s)$ v čase $s$ a kartézskými souřadnicemi $\gamma (t(s))$.

Věru rychle, zopakujme si kumulativní vzdálenost $s$ ujetou po délce oblouku s derivative (odkaz na výměnu souborů), abychom neztratili vzorky.

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

Pro interpolaci časových bodů $t(s_i)$ a souřadnic $\gamma (t(s_i))$, které odpovídají stejně vzdáleným krokům $s_i$ po délce oblouku, použijeme funkci Matlab interp1. V souladu s tím deklarujeme argumenty interp1 pomocí názvů proměnných uvedených v jeho dokumentaci. Vektor X je původní hodnota $s_i$, tj. vzdálenost ujetá podél délky oblouku v čase $t_i$. Matice V má sloupcové vektory, jejichž řádky jsou $t_i$ (náš původní časový parametr ve stejné velikosti kroku) a souřadnice $\gamma (t_i)$.

X = s.';V = ;

Potřebujeme interpolovat, abychom našli časové body $t(s_i)$ odpovídající stejně vzdáleným krokům délky oblouku podél křivky. Tyto stejně vzdálené kroky probíhají od $s_0=0$ do $s_N=L$, kde $L$ je celková délka oblouku.

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

Můžeme ověřit, že s(N) == sum(diff(Xq)), jak by mělo být. Využijeme možnosti vícerozměrné kusové lineární interpolace interpolační funkce interp1 programu Matlab k nalezení interpolovaných hodnot pro čas $t(s_i)$ a souřadnice $\gamma (t(s_i))$, které odpovídají stejně vzdáleným krokům $s_i$ uvedeným v Xq.

Vq = interp1(X,V,Xq); 

Volání příkazu diff(Xq) ukazuje, že se pohybujeme po krocích o konstantní délce oblouku podél $\gamma$, zatímco volání příkazu diff(Vq) ukazuje, že časové kroky již nejsou stejné (první sloupec). Výsledek naší interpolace je tedy následující:

  • délka oblouku $s_i$ v konstantních krocích (Xq)
  • odpovídajících časovým bodům $t_i$, již ne v konstantních krocích (první sloupec Vq)
  • souřadnice $\gamma(t(s))$ jako funkce délky oblouku (druhý a třetí sloupec Vq)

Takže parametrizace délky oblouku limaconu $\gamma (t(s))$ je vyjádřena v kartézských souřadnicích jako xs a ys.

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

Tyto vektory udávají polohu částice pohybující se po $\gamma$ jako funkci $s$, kde $s$ roste s krokem 0.1058. Zde jsou dvě parametrizace křivky $\gamma$, a to $\gamma (t)$ modře a $\gamma (t(s))$ červeně.

dvě parametrizace

Budu muset ještě něco udělat, pokud budu chtít umožnit periodické řešení, protože současný skript Matlabu to obecně neumožňuje. Abyste to viděli, stačí se podívat na vzdálenost mezi posledním a prvním vzorkem $\gamma (t(s))$ vyznačenou červeně výše. Kdybychom po limaconu postoupili ještě o jeden krok o 0.1058 jednotek, nepřistáli bychom v bodě, který jsme již navštívili, přestože víme, že limacony jsou $2\pi$-periodické. Myslím, že se to v podstatě rovná volbě jiné velikosti kroku pro $s$ než 0.1058.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.