クォータニオンから回転行列を得る

結論

クォータニオンを使う場合 共役クォータニオンを使う場合
(1)
\begin{align} (x,y,z,w)=(x_asin\frac{\theta}{2},y_asin\frac{\theta}{2},z_asin\frac{\theta}{2},cos\frac{\theta}{2}) \end{align}
(2)
\begin{align} (x,y,z,w)=(-x_asin\frac{\theta}{2},-y_asin\frac{\theta}{2},-z_asin\frac{\theta}{2},cos\frac{\theta}{2}) \end{align}
x,y,z,wはクォータニオンの成分である。(3)
\begin{pmatrix} 1 - 2(yy + zz) & 2(xy - zw) & 2(zx + yw) & 0\\ 2(xy + zw) & 1- 2(zz + xx) & 2(yz - xw) & 0\\ 2(zx - yw) & 2(yz + xw) & 1 - 2(xx + yy) & 0\\ 0 & 0 & 0 & 1 \end{pmatrix}
x,y,z,wは共役クォータニオンの成分である。(4)
\begin{pmatrix} 1 - 2(yy - zz) & 2(xy + zw) & 2(zx - yw) & 0\\ 2(xy - zw) & 1- 2(zz - xx) & 2(yz + xw) & 0\\ 2(zx + yw) & 2(yz - xw) & 1 - 2(xx - yy) & 0\\ 0 & 0 & 0 & 1 \end{pmatrix}

特徴

対角成分は1-なんとかになっている

なぜこうなるのか?

nは回転軸。
θは回転角
任意の軸周りの回転の行列の式

(5)
\begin{bmatrix} n_{x}^2(1-\cos\theta)+\cos\theta&n_x n_y(1-\cos\theta)+n_z \sin\theta&n_x n_z (1-\cos\theta)-n_y \sin\theta\\ n_x n_y(1-\cos\theta)-n_z\sin\theta & n_y^2(1-\cos\theta)+\cos\theta & n_yn_z(1-cos\theta)+n_x\sin\theta\\ n_xn_z(1-\cos\theta)+n_y\sin\theta&n_yn_z(1-\cos\theta)-n_x\sin\theta&n_z^2(1-\cos\theta)+\cos\theta \end{bmatrix}

と、回転角と回転軸が与えられた時のクォータニオンの成分

(6)
\begin{align} w=\cos\frac{\theta}{2}\\ x=n_x\sin\frac{\theta}{2}\\ y=n_y\sin\frac{\theta}{2}\\ z=n_z\sin\frac{\theta}{2}\\ \end{align}

であることからクォータニオンを行列に変換する方法が導き出せる。
θを$\frac{\theta}{2}$に変換するには倍角の公式1$\cos\theta=1-2sin^2(\frac{\theta}{2})$を使えばいい。

サポートサイト Wikidot.com