Rotation (avbildning)

Från Rilpedia

Version från den 29 maj 2009 kl. 05.05 av RibotBOT (Diskussion)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till: navigering, sök
Wikipedia_letter_w.pngTexten från svenska WikipediaWikipedialogo_12pt.gif
rpsv.header.diskuteraikon2.gif
Rotation kring O i plan geometri

En rotationsmatris är en beskrivning av en linjär avbildning som roterar ett geometriskt objekt.

Sedan början av 1990-talet har transformationer i form av isometrier (d.v.s. främst rotationer och translationer) blivit allt viktigare i datorgrafiksammanhang då man söker efterlikna vår vardagliga tredimesionella värld till exempel i spel. Betraktar man ett någorlunda modernt 3D-spel såsom till exempel Super Mario 64 blir det väldigt tydligt. Allteftersom man springer runt i den tredimensionella världen flyttas (roteras) spelfiguren runt i världen.

Rotationer kan realiseras i datorgrafik på flera olika sätt. Två vanliga representationer är via rotationsmatriser och via kvaternioner. Rotationsmatriser lider dock av flera brister, som inte finns i kvaternionrepresentationen. Därför används kvaternioner allt oftare.

Matrisrotation kan anges genom att man använder tre stycken Eulervinklar – en för varje axel (tyvärr blir det en del problem med detta tillvägagångssätt), eller med en axel och en rotationsvinkel.


En typisk rotationsmatris i tre dimensioner är


\left(
\begin{matrix}
\cos \theta & -\sin \theta & 0 \\
\sin \theta & \cos \theta & 0 \\
0 & 0 & 1 \\
\end{matrix}
\right)

Den är alltså ett specialfall av en generell rotationsmatris som vid matrismultiplikation roterar en vektor en vinkel θ kring z-axeln (med andra ord z-axeln är rotationsaxel). Notera att varje rotationsmatris med nödvändighet är ortogonal ty annars blir den omöjligen en isometri och (nästan) omvänt är alla matriser R med determinant ett (det(R) = 1) en rotationsmatris för någon vinkel (specialfallet med translation räknas som rotation med rotationscentrum beläget på oändlighetslinjen).

Så här realiserar man en rotation via kvaternioner: vi specificerar rotationsaxeln \mathbf{n} (med krav att | n | = 1) och rotationsvinkel θ genom att skapa kvaternionen q = \cos \theta + \mathbf{n} \sin \theta och dess konjugat \bar{q}. All multiplikation nedan är f.ö. kvaternionmultiplikation, som skiljer sig från vanlig multiplikation.

Bilda sedan konjugationsmappningen C_q(x) = q x \bar{q}, där man tänker sig att den helt imaginära kvaternionen x representerar den aktuella 3D-punkten (eftersom den är helt imaginär finns det en entydigt förhållande mellan de tre 3D-koordinaterna och kvaternionen x). Då kommer den att rotera punkter (imaginära kvaternioner) x en vinkel .

Lägg märke till att konjugatet \bar{q} är detsamma som inversa kvaternionen q − 1 eftersom vi kräver att | n | = 1, vilket är helt analogt med att matrisen måste vara ortogonal (egentligen ännu mer analogt för unitära matriser och konjugatets betydelse för dessa).

En trevlig egenskap hos kvaternionrotation är att den sammansatta rotationen ges av produkten. Alltså, ska man rotatera punkten x först med axel och vinkel (kvaternionen) q via Cq och sedan med p via Cq fås sammansatta rotationen direkt av Cpq(x), där pq avser kvaternionprodukten av axlarna och vinklarna (kvaternionerna) p och q.

Personliga verktyg