maanantai 6. toukokuuta 2019

Kuution pyörittelyä

Linkki liikkuvaan kuvaan

xy-tason pistettä $(x,y)$ voi kiertää origon ympäri kulman $w$ verran kertomalla pystyvektoriksi kirjoitetut koordinaatit kiertomatriisilla matriisitulomielessä:
\[
\begin{pmatrix}\cos(w) & -\sin(w) \\ \sin(w) & \phantom{-}\cos(w)\end{pmatrix}
\begin{pmatrix}x \\ y\end{pmatrix}\ .
\]
Kuvion kiertäminen tapahtuu kiertämällä periaatteessa sen jokainen piste, mutta esimerkiksi neliötä kierrettäessä riittää kiertää sen kärkipisteet ja piirtää kierretty neliö näiden avulla.

Mikä olisi kaksiulotteisen kierron kolmiulotteinen vastine? Kiertokeskuksena oleva origo on tällöin korvattava origon kautta kulkevalla kiertoakselilla, jonka ympäri kierretään kulman $w$ verran. Tällöinkin kierto voidaan kuvata matriisilla, joka nyt on kokoa $3 \times 3$.

Matriisi saadaan suhteellisen helposti, jos käytettävissä on riittävästi matriisilaskentaa tukeva symbolinen ohjelma. Jos kiertoakselin yksikön pituinen suuntavektori on $\vec{n} = n_1\vec{i} + n_2\vec{j} + n_3\vec{k}$, muodostetaan matriisi
\[
N = \begin{pmatrix} 0 & -n_3 & n_2 \\ n_3 & 0 & -n_1 \\ -n_2 & n_1 & 0 \end{pmatrix}.
\]
Eksponenttifunktio voidaan määritellä myös matriiseille ja kiertomatriisi saadaan tämän avulla:
\[ Q = \exp(wN),
\] missä $w$ on kiertokulma.

Matriisieksponenttifunktio voidaan määritellä eksponenttifunktion tavanomaisen sarjakehitelmän avulla:
\[
\exp(A) = \sum_{k=0}^\infty \frac{A^k}{k!}.
\]
Tässä potenssit $A^k$ tarkoittavat matriisituloja ja sarjan suppeneminen täytyy luonnollisesti osoittaa. Symboliset ohjelmat eivät kuitenkaan laske matriisieksponenttifunktion arvoja tästä määritelmästä, vaan matriisien ominaisarvoteoria antaa siihen paremmat mahdollisuudet.

Alla oleva lasku näyttää kiertomatriisin laskemisen Mathematicalla tarkkoja arvoja käyttäen. Graafisiin demonstraatiotarkoituksiin on kuitenkin luonnollisempaa käyttää numeerista laskentaa, ts. riittävän tarkkoja likiarvoja.


Mathematica — kuten monet muutkin kehittyneet ohjelmat — tarjoavat mahdollisuuden laatia animaatioita ja säädettäviä demonstraatioita niin ilmiön kuin sitä kuvaavan koodin tutkimiseen: katso kuvakaappausta artikkelin alussa ja linkin takana olevaa liikkuvaa kuvaa.

Matemaattisen tekstin lukijan on syytä olla hereillä ja aina hieman epäluuloinen. Mistä tiedetään, että menettely todella antaa kiertomatriisin? Onko selvää, että kolmiulotteisella kierrolla on aina akseli, kuten edellä ohimennen oletettiin? Jos kuutiota jotenkin pyöräyttelee, niin pääseekö alkuasennosta loppuasentoon aina yhdellä sopivan suuruisella kierrolla sopivan akselin ympäri? Työkaluiksi tarvitaan melkoinen annos matriisilaskentaa. Alaan perehtynyt lukija voi kokeilla taitojaan.

1 kommentti:

Kari Peisa kirjoitti...

Laaja ja mielenkiintoinen aihepiiri on tuo 3D kiertomatriisien konstruoiminen. Niitä voidaan muodostaa aika monella eri tavalla. Yllä olevassa esityksessä kiinnosti, miten matriisi N on löydetty. Se perustunee Rodriquen menetelmään (https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula#Matrix_notation).

Itse olen joskus ohjelmoinut Mathematicaan kiertomatriisin kiertoakselista ja kiertokulmasta perustuen kvaterniotekniikkaan. Tein silloin laajemmankin esityksen kvaterniotekniikan implementoimisesta Mathematicaan ja sen käytöstä 3D grafiikassa (AIT Vaasa 2005). Esityksessäni tarkasteltiin myös interpolointialgoritmia slerp. Esitykseni löytyy kokonaisuudessaan kotisivultani http://www.kpeisa.fi/work/Quaternions%20AITC%202005.pdf