Rotation (avbildning)

Från Wikipedia
Hoppa till: navigering, sök
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 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 – eller med en axel och en rotationsvinkel. Detta tillvägagångssätt för med sig vissa problem.

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 \theta 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 \theta 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 2\theta.

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 C_q och sedan med p via C_q fås sammansatta rotationen direkt av C_{pq}(x), där pq avser kvaternionprodukten av axlarna och vinklarna (kvaternionerna) p och q.