next up previous contents
Nächste Seite: Rotation mit Eulerwinkeln Aufwärts: Geometrische Transformationen Vorherige Seite: Rotation   Inhalt

Unterabschnitte

Rotation mit Quaternionen

Was sind Quaternionen?

Quaternionen sind Elemente einer algebraischen Struktur, die als eine Erweiterung der komplexen Zahlen angesehen werden kann.

Man kann Addition und Multiplikation als innere Operationen der Struktur definieren, so dass die Körperaxiome mit Ausnahme der allgemeinen Kommutativität der Multiplikation gelten.

Man nennt einen solchen Körper auch Schiefkörper.

Quaternionen sind vierdimensionale Objekte, man schreibt sie jedoch zweckmäßigerweise als Skalarkomponente und dreidimensionale Vektorkomponente:


\begin{displaymath}q = [a,{\vec v}] \in \bbbr^4 \end{displaymath}

Quaternionenaddition:

\begin{displaymath}[a,{\vec v}]+[b,{\vec w}]=[a+b,{\vec v}+{\vec w}] \end{displaymath}

Quaternionenmultiplikation:

\begin{eqnarray*}[a,{\vec v}]\star[b,{\vec w}]&=&[ab-\langle{\vec v},{\vec w}\rangle , \\
& &\;\;a{\vec w}+b{\vec v}+{\vec v}\times{\vec w}]
\end{eqnarray*}



Man überprüfe als Übung, dass die Körperaxiome erfüllt sind (z.B. Assoziativgesetze und Distributivgesetze).

Quaternionen mit Skalarkomponente gleich Null nennt man auch reine Quaternionen (pure quaternions).

Zusammenfassung der Ähnlichkeiten zwischen komplexen Zahlen und Quaternionen:

Darstellung $z=a+ib$
  $q=[a,{\vec v}]$
konjugiert $\bar z=a-ib$
komplex $\bar q=[a,-{\vec v}]$
gemischtes $\begin{array}{lcl}
z\bar z &=& (a+ib)\cdot(a-ib)\\
&=& a^2+b^2\\
&=& \vert z\bar z\vert
\end{array}$
Produkt $\begin{array}{lcl}
q\bar q &=& [a,{\vec v}]\star[a,-{\vec v}]\\
&=& [a^2-\la...
...{\vec v}]\\
&=& [a^2-\langle{\vec v},-{\vec v}\rangle ,{\vec 0}]
\end{array}$
Betrag $\begin{array}{lcl}
\vert z\vert &=& \sqrt{a^2+b^2} \\
&=& \sqrt{z\bar z} \\
&=& \sqrt{\vert z\bar z\vert}
\end{array}$
  $\begin{array}{lcl}
\vert q\vert &=& \sqrt{a^2+\langle{\vec v},{\vec v}\rangle ^2} \\
&=& \sqrt{\vert q\bar q\vert} \\
\end{array}$
Kehrwert $\begin{array}{lcl}
1/z &=& \bar z/(z\bar z) \\
&=& (a-ib)/(a^2+b^2) \\
&=& \bar z/\vert z\bar z\vert
\end{array}$
  $\begin{array}{lcl}
1/q &=& \bar q/\vert q\bar q\vert \\
&=& [a,-{\vec v}]/(a^2+\langle{\vec v},{\vec v}\rangle )
\end{array}$

Für Einheitsquaternionen, d.h. solche mit Betrag gleich Eins, gilt weiterhin:


\begin{displaymath}\vert q\vert = 1\quad\Longrightarrow\quad q^{-1}=\bar q \end{displaymath}

Drehformel nach Hamilton

Mithilfe der Quaternionen lassen sich Drehungen im Dreidimensionalen sehr einfach spezifizieren und berechnen:

Sei ${\vec u}$ mit $\vert{\vec u}\vert=1$ der normierte Vektor der Rotationsachse und sei $\phi$ der gewünschte Rotationswinkel.

Diese Art und Weise der Spezifikation einer Rotation findet auch in OpenGL Anwendung: glRotateX(...).

Konstruieren Quaternion $q$ wie folgt:

\begin{displaymath}q = [\cos(\phi/2),\sin(\phi/2)\,{\vec u}] \end{displaymath}

Interpretieren einen zu rotierenden Punkt mit Ortsvektor ${\vec x}$ als reinen Quaternion

\begin{displaymath}x = [0,{\vec x}] \end{displaymath}

Dann ergibt sich der Zielpunkt ${\vec x}^{\prime}$ wieder in Form eines reinen Quaternionen als

\begin{displaymath}x^{\prime} = q\star x \star \bar q \end{displaymath}

Nachweis der Korrektheit der Drehformel

Dieser Abschnitt ist lediglich für den interessierten Leser.

Berechnen wir zuerst einige Beziehungen zwischen Winkel und Halbwinkel, die wir später brauchen werden:

\begin{eqnarray*}
\sin\phi &=& \sin(\phi/2+\phi/2) \\
&=& \sin(\phi/2)\cos(\phi/2)+\cos(\phi/2)\sin(\phi/2) \\
&=& 2\sin(\phi/2)\cos(\phi/2)
\end{eqnarray*}



\begin{eqnarray*}
\cos\phi &=& \cos(\phi/2+\phi/2) \\
&=& \cos(\phi/2)\cos(\ph...
...-\sin(\phi/2)\sin(\phi/2) \\
&=& \cos^2(\phi/2)-\sin^2(\phi/2)
\end{eqnarray*}



\begin{eqnarray*}
1-\cos\phi &=& 1-\cos^2(\phi/2)+\sin^2(\phi/2) \\
&=& 1-(1-\sin^2(\phi/2))+\sin^2(\phi/2) \\
&=& 2\sin^2(\phi/2) \\
\end{eqnarray*}



Letztere Gleichung sollte man auch generell zur Berechnung von $1-\cos\phi$ benutzen, da sie für kleine $\phi$ numerisch wesentlich stabiler zu berechnen ist.

Führen wir folgende Bezeichnungen und Abkürzungen ein:

zu rotierender Punkt

\begin{displaymath}{\vec x}= \left(\begin{array}{c}x_0\\ x_1\\ x_2\end{array}\right) \end{displaymath}

Rotationsachse

\begin{displaymath}{\vec u}= \left(\begin{array}{c}u_0\\ u_1\\ u_2\end{array}\right) \quad\mbox{mit}\quad \vert{\vec u}\vert=1 \end{displaymath}

Rotationsquaternion mit Rotationswinkel $\phi$

\begin{displaymath}q = [\cos(\phi/2),\sin(\phi/2){\vec u}] \end{displaymath}

Abkürzungen

\begin{eqnarray*}
t &=& \sin(\phi/2) \\
s &=& \cos(\phi/2)
\end{eqnarray*}



Damit schreiben wir also die Rotation nach der Drehformel wie folgt:


\begin{displaymath}x^{\prime}=[s,t\cdot{\vec u}]\star[0,{\vec x}]\star[s,-t\cdot{\vec u}] \end{displaymath}

Nun berechnen wir eine Matrix $M$, die die folgende ``Gleichung'' (bei entsprechender Interpretation der reinen Quaternionen und dreidimensionalen Vektoren) erfüllt:


\begin{displaymath}[s,t{\vec u}]\star[0,{\vec x}]\star[s,-t{\vec u}]
=q\star x\...
...=M\cdot\left(\begin{array}{c}x_0\\ x_1\\ x_2\end{array}\right) \end{displaymath}

und zeigen dann, dass die Matrix $M$ eine Rotationsmatrix ist, die man sowohl als Produktmatrix aus Achsenrotationsmatrizen als auch durch direkte Matrizenkonstruktion erhalten kann.

Bemerkung: Wir führen hier keine zusätzliche Translation aus. Diese ist nicht durch Multiplikation mit Quaternionen darstellbar. Man muss also beide Operationen - Rotation und Translation - wieder getrennt betrachten.

Rechnen wir die hamiltonsche Formel aus:

\begin{eqnarray*}
\lefteqn{[s,t{\vec u}]\star[0,{\vec x}]\star[s,-t{\vec u}]} \\...
...vec u}\times{\vec x})-t^2({\vec u}\times{\vec x})\times{\vec u}]
\end{eqnarray*}



Wir erkennen als erstes, dass tatsächlich ein reiner Quaternion als Ergebnis entsteht.

Analysieren wir die Vektorkomponente.

Hierzu notieren wir zuerst die Vektorprodukte mit Koordinatenwerten:

\begin{eqnarray*}
\left(\begin{array}{c}u_0\\ u_1\\ u_2\end{array}\right)\times...
..._1)u_2\\ (u_1x_2-u_2x_1)u_1-(u_2x_0-u_0x_2)u_0\end{array}\right)
\end{eqnarray*}



Formulieren wir damit die $x$-Komponente des Resultatsvektors aus:

\begin{eqnarray*}
x_0^{\prime}
&=&
t^2(u_0x_0+u_1x_1+u_2x_2)u_0\\
& & \mbox...
...t^2u_0u_1) \\
& & \mbox{}+x_2\cdot(t^2u_0u_2+2stu_1+t^2u_0u_2)
\end{eqnarray*}



Nun kann man unter Zuhilfenahme von

\begin{eqnarray*}
{\vec u}{\vec u}^{\top}
&=& \left(\begin{array}{c}u_0\\ u_1\...
...u_1 & u_1^2 & u_1u_2\\ u_0u_2 & u_1u_2 & u_2^2\end{array}\right)
\end{eqnarray*}



und analogem Formulieren der anderen Komponenten (Übung) das Ergebnis in folgender Art notieren:


\begin{displaymath}{\vec x}^{\prime}
= (s^2-t^2)\cdot\left(\begin{array}{ccc}1 ...
...u_2 & -u_1\\ -u_2 & 0 & u_0\\ u_1 & -u_0 & 0\end{array}\right)
\end{displaymath}

Und wir erhalten durch Ersetzen der Abkürzungen und Anwenden der Halbwinkelbeziehungen von oben folgende Darstellung:


\begin{displaymath}{\vec x}^{\prime}
= \cos\phi\cdot\left(\begin{array}{ccc}1 &...
...u_2 & -u_1\\ -u_2 & 0 & u_0\\ u_1 & -u_0 & 0\end{array}\right)
\end{displaymath}

Was hat dies mit der Rotationsmatrix zu tun?

Betrachten wir nochmals die $z$-Achsenrotationsmatrix und schreiben diese auch als eine geschickte Summe von Matrizen, wobei wir erst wieder ein paar Kurznotationen einführen:

\begin{eqnarray*}
E &=& \left(\begin{array}{ccc}1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & ...
...ray}{ccc}0 & 1 & 0\\ 0 & 0 & 0\\ 0 & 0 & 0\end{array}\right) \\
\end{eqnarray*}



Damit erhalten wir:

\begin{eqnarray*}
R_z(\phi)
&=&
\left(\begin{array}{ccc}\cos\phi & -\sin\phi &...
...phi\cdot E+(1-\cos\phi)\cdot E_{22}+\sin\phi\cdot(E_{01}-E_{10})
\end{eqnarray*}



Multiplizieren wir nun diese $z$-Rotationsmatrix von links und rechts mit einer orthonormalen Matrix $A$, die wir mit ${\vec u}$ und zwei dazu senkrechten Vektoren ${\vec v}$ und ${\vec w}$, d.h. ${\vec w}\times{\vec v}={\vec u}$ als

\begin{displaymath}A = \left(\begin{array}{ccc}w_0 & v_0 & u_0\\ w_1 & v_1 & u_1\\ w_2 & v_2 & u_2\end{array}\right) \end{displaymath}

darstellen, so erhalten wir

\begin{eqnarray*}
R &=& A R_z(\phi) A^\top \\
&=&
A
(\cos\phi E+(1-\cos\phi)...
...u}^\top
-\sin\phi ({\vec w}{\vec v}^\top-{\vec v}{\vec w}^\top)
\end{eqnarray*}



und letztlich

\begin{eqnarray*}
R &=&
\cos\phi E
+(1-\cos\phi) {\vec u}{\vec u}^\top
+\sin...
...& u_2 & -u_1\\ -u_2 & 0 & u_0\\ u_1 & -u_0 & 0\end{array}\right)
\end{eqnarray*}



was genau dem obigen Ausdruck entspricht.


next up previous contents
Nächste Seite: Rotation mit Eulerwinkeln Aufwärts: Geometrische Transformationen Vorherige Seite: Rotation   Inhalt
© 2004/2005, A. Formella & D. Fellner, Universität Braunschweig