メモ:クォータニオンと回転行列

回転とクォータニオン

3次元空間での回転をクォータニオンで表すことを考える。

回転軸のベクトルを  {\bf n}、回転角を  \theta とすると

回転を表すクォータニオン {\bf q} = \cos \frac{\theta}{2} + {\bf n} \sin \frac{\theta}{2}

 {\bf n} = \left(\begin{array}{c} x \\ y \\ z \\ \end{array} \right) なら  {\bf q} =
 \left(\begin{array}{c} q_{0} \\ q_{1} \\ q_{2} \\ q_{3} \\ \end{array} \right) = 
\left(\begin{array}{c}
\cos \frac{\theta}{2} \\
x \sin \frac{\theta}{2} \\
y \sin \frac{\theta}{2} \\
z \sin \frac{\theta}{2} \\
\end{array} \right)

この回転でベクトル  {\bf r} = \left(\begin{array}{c} r_{1} \\ r_{2} \\ r_{3} \\ \end{array} \right) {\bf r'}写像されるとすると

ベクトル  {\bf r}クォータニオン  {\bf r} = \left(\begin{array}{c} 0 \\ r_{1} \\ r_{2} \\ r_{3} \\ \end{array} \right) と読み替えて

  {\bf r'} = {\bf q r q^{*}}

ただし、  {\bf q^{*}}  {\bf q} の共役クォータニオンで、 {\bf q^{*}} =
 \left(\begin{array}{r} q_{0} \\ -q_{1} \\ -q_{2} \\ -q_{3} \\ \end{array} \right)

回転行列

同じ回転を表す行列を  R とすると

  {\bf r'} = R {\bf r}

この行列  Rクォータニオン  {\bf q} の間には次式が成り立つ。

 R = 
\left(\begin{array}{ccc}
q_{0}^{2} + q_{1}^{2} - q_{2}^{2} - q_{3}^{2}  &  2(q_{1}q_{2} - q_{0}q_{3})  &  2(q_{1}q_{3} + q_{0}q_{2})\\
2(q_{1}q_{2} + q_{0}q_{3})  &  q_{0}^{2} - q_{1}^{2} + q_{2}^{2} - q_{3}^{2}  &  2(q_{2}q_{3} - q_{0}q_{1})\\
2(q_{1}q_{3} - q_{0}q_{2})  &  2(q_{2}q_{3} + q_{0}q_{1})  &  q_{0}^{2} - q_{1}^{2} - q_{2}^{2} + q_{3}^{2}\\
\end{array} \right)

これは、基底ベクトル
\left(\begin{array}{c} 1 \\ 0 \\ 0 \\ \end{array} \right)
\left(\begin{array}{c} 0 \\ 1 \\ 0 \\ \end{array} \right)
\left(\begin{array}{c} 0 \\ 0 \\ 1 \\ \end{array} \right)
の回転による写像を並べたものである。

回転行列は方向余弦行列(DCM)とも呼ばれる。

回転を表現する方法の比較

方法 パラメータ数 ジンバルロック 計算量
オイラー 3 ×(有) ×(大)
回転ベクトル(軸角度表現) 3(4) 〇(無) △(中)
回転行列 9 〇(無) 〇(小)
クォータニオン 4 〇(無) 〇(小)

オイラー角は人間にとっては直感的(せやろか?)と言われるが、ジンバルロックがあるし、三角関数を多用し計算量が多いのでコンピュータでの内部表現にはあまり向かない。回転ベクトル(軸角度表現)も三角関数を使うがオイラー角よりは少ない。回転行列はもっとも単純明解な数式で回転を記述できるがパラメータ数が多い。クォータニオンはパラメータ数も少なく、計算量も少ない。(しらんけど)