Rotationsmatrix und Translationsvektor

Eine Pose kann mit einer Rotationsmatrix \(R\) und einem Translationsvektor \(T\) definiert werden.

\[\begin{split}R = \left(\begin{array}{ccc} r_{00} & r_{01} & r_{02} \\ r_{10} & r_{11} & r_{12} \\ r_{20} & r_{21} & r_{22} \end{array}\right), \qquad T = \left(\begin{array}{c} X \\ Y \\ Z \end{array}\right).\end{split}\]

Die Posentransformation für einen Punkt \(P\) ist

\[P' = R P + T.\]

Umrechnung von Rotationsmatrizen in Quaternionen

Die Umrechnung von einer Rotationsmatrix (mit \(det(R)=1\)) in eine Quaternion \(q=(\begin{array}{cccc}x & y & z & w\end{array})\) kann wie folgt durchgeführt werden.

\[\begin{split}x &= \text{sign}(r_{21}-r_{12}) \frac{1}{2}\sqrt{\text{max}(0, 1 + r_{00} - r_{11} - r_{22})} \\ y &= \text{sign}(r_{02}-r_{20}) \frac{1}{2}\sqrt{\text{max}(0, 1 - r_{00} + r_{11} - r_{22})} \\ z &= \text{sign}(r_{10}-r_{01}) \frac{1}{2}\sqrt{\text{max}(0, 1 - r_{00} - r_{11} + r_{22})} \\ w &= \frac{1}{2}\sqrt{\text{max}(0, 1 + r_{00} + r_{11} + r_{22})}\end{split}\]

Der \(\text{sign}\) Operator gibt -1 zurück, falls sein Argument negativ ist. Sonst wird 1 zurück gegeben. Er wird zur Wiederherstellung das Vorzeichens der Wurzel benutzt. Die \(\text{max}\) Funktion stellt sicher, dass das Argument der Wurzel nicht negativ ist, was in der Praxis durch Rundungsfehler passieren kann.

Umrechnung von Quaternionen in Rotationsmatrizen

Die Umrechnung von einer Quaternion \(q=(\begin{array}{cccc}x & y & z & w\end{array})\) mit \(||q||=1\) in eine Rotationsmatrix kann wie folgt durchgeführt werden.

\[\begin{split}R = 2 \left(\begin{array}{ccc} \frac{1}{2} - y^2 - z^2 & x y - z w & x z + y w \\ x y + z w & \frac{1}{2} - x^2 - z^2 & y z - x w \\ x z - y w & y z + x w & \frac{1}{2} - x^2 - y^2 \end{array}\right)\end{split}\]