クォータニオン
Quaternion、四元数
クォータニオンは、虚数単位$ i・$ j・$ kを用いて、 $ (x, y, z; w) = xi + yj + zk + w
で表される
$ i・$ j・$ kは、以下の関係を満たす
$ i^2 = j^2 = k^2 = ijk = -1
乗積表にすると、以下の通り
table:table
* 1 i j k
1 1 i j k
i i -1 k -j
j j -k -1 i
k k j -i -1
$ \begin{bmatrix} w_1 \\ x_1 \\ y_1 \\ z_1 \end{bmatrix} * \begin{bmatrix} w_2 \\ x_2 \\ y_2 \\ z_2 \end{bmatrix} = \begin{bmatrix} w_1 w_2 - x_1 x_2 - y_1 y_2 - z_1 z_2 \\ w_1 x_2 + x_1 w_2 + y_1 z_2 - z_1 y_2 \\ w_1 y_2 - x_1 z_2 + y_1 w_2 + z_1 x_2 \\ w_1 z_2 + x_1 y_2 - y_1 x_2 + z_1 w_2 \end{bmatrix}
絶対値・共役・逆
$ |q| = \sqrt{w^2 + x^2 + y^2 + z^2}
絶対値が1のクォータニオンを単位クォータニオンと呼ぶ
クォータニオンの正規化は$ {\rm normalize}(q) = \frac{q}{|q|}とできる $ \bar q = w - xi - yj - zk
$ q^{-1} = \frac{\bar q}{|q|^2}
単位クォータニオンのとき、$ \bar q = q^{-1}
回転での利用
基本的には単位クォータニオンとして正規化して使いたい
だいたいDCCでわけわからん挙動だ~~~って絶叫しているやつは、内部的に正規化されてたり・正規化されていなくてスケールが変わっていたりしてわけわからんくなっている
クォータニオンのベクトルへの適用をする際は、
$ p = (v_x, v_y, v_z; 0)
と置いた上で
$ q^{-1} \ p \ qして、結果から$ x・$ y・$ zを取り出す
Axis-Angle
回転軸を$ v・回転角を$ \thetaとしたとき、
$ v = \left\| \begin{matrix} x \\ y \\ z \end{matrix} \right\|
$ w = \cos(\theta / 2)
$ \theta = 2\ {\rm acos}(w)
クォータニオンおてがる角度早見表
table:table
w θ deg turn
1.000 0 0 0.000
0.966 1/6 π 30 0.083
0.924 1/4 π 45 0.125
0.866 1/3 π 60 0.167
0.707 1/2 π 90 0.250
0.500 2/3 π 120 0.333
0.000 π 180 0.500
-0.707 1.5 π 270 0.750
-1.000 2 π 360 1.000