クォータニオンで2次元回転

quaternion-2d.png

クォータニオンで2次元回転できるかな?
また、2次元で回転させたら、クォータニオンへの理解がスムーズかな?
ということでやってみましょう。
2次元ってことはzは考えなくてよくなるから、三元数になるのかな?

2次元空間での回転を四元数で表現する

回転後の座標=回転を表す四元数*回転前の座標*回転を表す四元数の共役

(1)
\begin{align} x=\bar{q}xq \end{align}

どんな四元数??

xy平面の世界では、常に回転軸が(x,y,z)=(0,0,1)になります。
回転角を$\theta$とすると、

(2)
\begin{align} (x,y,z,w)=(0,0, sin\frac{\theta}{2},cos\frac{\theta}{2}) \end{align}

ただし、$x_a^2+y_a^2+z_a^2=1$である。
これの共役はこうです

(3)
\begin{align} (x,y,z,w)=(0,0,-sin\frac{\theta}{2},cos\frac{\theta}{2}) \end{align}

点(x,y)=(2,0)を60度回転させるには?

ここで、図にある点A(x,y)=(2,0)を点A'になるようにθ=60度回転させたら、点A'の座標は何になる?
sixty.png
普通に、2Dの回転行列、sinやcosを駆使して行うと、こういう行列を書ければいいことになる。

(4)
\begin{align} \left[ \begin{matrix} A'_x\\ A'_x \end{matrix} \right] = \left[ \begin{matrix} \cos\theta&-\sin\theta\\ \sin\theta&\cos\theta\\ \end{matrix} \right] \left[ \begin{matrix} A_x\\ A_y\end{matrix} \right] \end{align}

θ=60度,A=(2,0)なので、

(5)
\begin{align} \left[ \begin{matrix} 1\\ \sqrt{3} \end{matrix} \right] = \left[ \begin{matrix} \frac{1}{2}&-\frac{\sqrt{3}}{2}\\ \frac{\sqrt{3}}{2}&\frac{1}{2}\\ \end{matrix} \right] \left[ \begin{matrix} 2\\ 0\end{matrix} \right] \end{align}

なので

(6)
\begin{align} q=(0,0,-sin\frac{60}{2},cos\frac{60}{2})\\ q=(0,0,-sin30,cos30)\\ q=(0,0,\frac{1}{2},\frac{\sqrt{3}}{2})\\ \hat{q}=(0,0,-\frac{1}{2},\frac{\sqrt{3}}{2}) \end{align}

回転させたい座標を共役の四元数と普通の四元数で挟み撃ちにする
このとき、掛け算の仕方が特殊なので要注意。
回転させたい座標はクォータニオンとして扱うこと。
どういう意味かというと、今回転させたい座標は例として
(x,y)=(2,0)を挙げたけど
これを(x,y,z,w)=(2,0,0,1)としてz=0とw=1成分を追加して計算するということ。
そして、クオータニオンで掛け算するときはこうする

(7)
\begin{align} A=LR\\ A_x=L_xR_w+L_yR_z-L_zR_y+L_wR_x\\ A_y=-L_xR_z+L_yR_w+L_zR_x+L_wR_y\\ A_z=L_xR_y-L_yR_x+L_zR_w+L_wR_z\\ A_w=-L_xR_x-L_yR_y-L_zR_z+L_wR_w\\ \end{align}

これに倣い、掛け算をしてみよう
クオータニオンq=$(0,0,\frac{1}{2},\frac{\sqrt{3}}{2}$
その共役である$\bar{q}$$(0,0,-\frac{1}{2},\frac{\sqrt{3}}{2}$である。
そして回転させるために次のようにして挟み撃ちにする

(8)
\begin{align} A'=\bar{q}Aq \end{align}

まず、左側の方の$\bar{q}A$の計算をしてみる

(9)
\begin{align} (\bar{q}A)_{x}=\frac{\sqrt{3}}{2}\times 2+0+0-\frac{\sqrt{3}}{2}=\sqrt{3}\\ (\bar{q}A)_{y}=0-0+0-\frac{1}{2}\times 2=-1\\ (\bar{q}A)_{z}=0+0+0-\frac{1}{2}\times 1=-\frac{1}{2}\\ (\bar{q}A)_{w}=\frac{\sqrt{3}}{2}\times 1-0-0+\frac{1}{2}\times 0=\frac{\sqrt{3}}{2} \end{align}

$\bar{q}A =(\sqrt{3},-1,-\frac{1}{2},\frac{\sqrt{3}}{2})$であることがわかった。
次に$(\bar{q}A)q$をする

(10)
\begin{align} ((\bar{q}A)q)_{x}=\sqrt{3}\times \frac{\sqrt{3}}{2}-1\times \frac{1}{2}=1\\ ((\bar{q}A)q)_{y}= -\frac{\sqrt{3}}{2}- \frac{\sqrt{3}}{2}=\sqrt{3}\\ ((\bar{q}A)q)_{z}=-\frac{1}{2}\times \frac{\sqrt{3}}{2}+ \frac{\sqrt{3}}{2}\times \frac{1}{2}=0\\ ((\bar{q}A)q)_{w}=\frac{1}\times \frac{1}{2}+\frac{\sqrt{3}}{2}\times \frac{\sqrt{3}}{2}=1 \end{align}

結果的に
$\bar{q}Aq=(1,\sqrt{3},0,1)$になった。おお、これは、行列で回転させた時と同じ結果である。。。!!!


rotation-matrix-2d

サポートサイト Wikidot.com rotation-matrix-2d