Olen työskennellyt tämän parissa hieman enemmän, joten taidan kokeilla omaa kysymystäni. Tässä on taas limaconimme.
Huomaa, mistä lähdemme liikkeelle: aikaparametrista $t$, joka kulkee yhtäläisin askelin intervalli $$:lla, kumulatiivisesta matkasta $s$, joka on kuljettu kaaren pituutta pitkin ajanhetkellä $t$, ja limaconin kartesiankoordinaatistosta $ \gamma$ ajanhetkellä $t$. Asetimme tämän paljon kysymyksessä. Haluamme sen sijaan kaaren pituusparametrin $s$, joka kulkee yhtäläisin askelin intervallilla $$, jossa $L$ on kaaren kokonaispituus, sekä ajan $t(s)$ ajankohtana $s$ ja kartesiokoordinaatit $\gamma (t(s))$.
Todella nopeasti, tehdään kumulatiivinen etäisyys $s$, joka on kuljettu kaaren pituutta pitkin, uudestaan numerolla derivative
(Tiedostojenvaihtolinkki), ettemme menetä näytteitä.
x_t = derivative(x);y_t = derivative(y);s = cumtrapz( sqrt(x_t.^2 + y_t.^2 ) );
Käytämme Matlab-funktiota interp1
interpoloidaksemme aikapisteet $t(s_i)$ ja koordinaatit $\gamma (t(s_i))$, jotka vastaavat kaaren pituutta pitkin tasaisin väliajoin kulkevia askelia $s_i$. Näin ollen ilmoitamme interp1
:n argumentit sen dokumentaatiossa annetuilla muuttujien nimillä. Vektori X
on alkuperäinen $s_i$ eli kaaren pituutta pitkin kuljettu matka ajankohtana $t_i$. Matriisissa V
on sarakevektoreita, joiden rivit ovat $t_i$ (alkuperäinen aikaparametrimme tasaisin askelin) ja koordinaatit $\gamma (t_i)$.
X = s.';V = ;
Meidän on interpoloitava löytääksemme aikapisteet $t(s_i)$, jotka vastaavat tasaisin väliajoin kulkevia kaaren pituuden askeleita pitkin kaarta. Nämä tasaisin välein olevat askeleet kulkevat arvosta $s_0=0$ arvoon $s_N=L$, missä $L$ on kaaren kokonaispituus.
L = s(end);s0 = s(1);N = length(s);Xq = linspace(s0,L,N); % equally spaced indices
Voidaan todentaa, että s(N) == sum(diff(Xq))
, kuten pitääkin. Käytämme Matlabin interpolointifunktion interp1
moniulotteista kappalemittaista lineaarista interpolointimahdollisuutta löytääksemme interpoloidut arvot ajalle $t(s_i)$ ja koordinaateille $\gamma (t(s_i))$, jotka vastaavat kohdassa Xq
annettuja $s_i$:n tasasuuruisia askelia.
Vq = interp1(X,V,Xq);
Kutsu osoitteeseen diff(Xq)
osoittaa, että liikumme vakiokaaren pituisin askelin pitkin $\gamma $, kun taas kutsu osoitteeseen diff(Vq)
osoittaa, että aika-askeleet eivät enää ole yhtä suuria (ensimmäinen sarake). Näin ollen interpolointimme tulos on:
- kaaren pituus $s_i$ vakioaskelein (
Xq
) - vastavat aikapisteet $t_i$, ei enää vakioaskeleina (
Vq
:n ensimmäinen sarake) - koordinaatit $\gamma(t(s))$ kaaren pituuden funktiona (
Vq
:n toinen ja kolmas sarake)
Siten kaaren pituuden parametrisointi limacon $\gamma(t(s))$ ilmaistaan kartesiankoordinaateissa xs
ja ys
.
xs = Vq(:,2);ys = Vq(:,3);
Nämä vektorit antavat pitkin $\gamma$ liikkuvan hiukkasen sijainnin $s$ funktiona, missä $s$ kasvaa 0.1058
askelin. Tässä on käyrän $\gamma $ kaksi parametrisointia, nimittäin $\gamma (t)$ sinisellä ja $\gamma (t(s))$ punaisella.
Joudun tekemään hieman lisätyötä, jos haluan sallia jaksolliset ratkaisut, sillä nykyinen Matlab-skripti ei sitä yleensä tee. Nähdäksesi tämän voit katsoa viimeisen ja ensimmäisen näytteen välistä etäisyyttä $\gamma (t(s))$ punaisella yllä. Jos etenisimme vielä yhden askeleen 0.1058
yksikköä limakonia pitkin, emme laskeutuisi pisteeseen, jossa olemme jo käyneet, vaikka tiedämme, että limakoni on $2\pi$-periodinen. Mielestäni tämä tarkoittaa periaatteessa sitä, että valitsemme $s$:lle eri askelkoon kuin 0.1058
.
.