Written by
beeplex
on
回転とクォータニオン(2)
- beeplex.net
- ゲーム・CG数学
- 回転とクォータニオン
- 回転とクォータニオン(2)
3次元回転と生成子
同じことを3次元でやってみましょう。
3次元では回転方向が3通りあります。
x,y,z軸それぞれを中心とした回転の3通りです。
3次元の回転を表す方法には色々な手法がありますが、簡単な方法の一つはx,y,z軸それぞれを中心とした回転を何らか決まった順番で、順に掛け合わせるものです。
この表し方をオイラー角(Euler angles)と呼びます。
今までと同じように、x,y,z軸をそれぞれ1,2,3軸と数字で表します。
2次元の場合は回転変換は $R(\theta)$
の1種類のみですが、3次元の場合は3つの軸どれを中心に回転させるかで3種類の回転変換が必要になります。
ここでは $i$
軸周りの角度 $\theta_i$
の回転変換を $R_i(\theta_i)$
と書くこととしましょう。
まず3軸周りの回転から考えます。
3軸周りの回転とは、ベクトルの第3成分はそのままで、第1,2成分だけが、2次元回転と同じように回転すれば良いはずです。
(図を書く予定)
ということは、行列で書くと1,2成分は2次元の回転行列と同じで、第3成分はそのままとなるようにすれば良いわけですので、以下のようになります。
$$
R_3(\theta_3)=
\left(
\begin{array}{ccc}
\mathrm{cos}\theta_3 & -\mathrm{sin}\theta_3 & 0\\
\mathrm{sin}\theta_3 & \mathrm{cos}\theta_3 & 0\\
0 & 0 & 1\\
\end{array}
\right)
$$
2次元と同じように、生成子も考えましょう。
ベクトル
$$
\boldsymbol{v}
=\left(
\begin{array}{ccc}
v_1\\
v_2\\
v_3\\
\end{array}
\right)
$$
を $i$
軸周りに無限小 $d\theta_i$
だけ回転させます。
問題は、元のベクトルを $90^\circ$
回転させたのでは、生成子が得られないということです。
3軸周りの $90^\circ$
回転行列は
$$
R_3(90^\circ)=
\left(
\begin{array}{ccc}
0 & -1 & 0\\
1 & 0 & 0\\
0 & 0 & 1\\
\end{array}
\right)
$$
のようになります。
次は無限小回転させたときに $\boldsymbol{v}$
が動く方向と長さ、つまり
$$
d\boldsymbol{v}
$$
を考えましょう。
回転により第3成分は変わらず、回転は1,2成分が2次元回転と同じように動くので、 $d\boldsymbol{v}$
の第3成分は0であり、1,2成分は2次元回転と同じ。
つまり、
$$
d\boldsymbol{v}
=
\left(
\begin{array}{ccc}
-v_2\\
v_1\\
0\\
\end{array}
\right)
$$
となります。
生成子とは
$$
d\boldsymbol{v}=d\theta_3J_3\boldsymbol{v}
$$
を満たすような行列 $J_3$
のことでした。
この条件を満たす行列を考えると、
$$
J_3
=\left(
\begin{array}{ccc}
0 & -1 & 0\\
1 & 0 & 0\\
0 & 0 & 0\\
\end{array}
\right)
$$
のようになります。
回転行列と3,3成分が異なりますね。
同じように、1,2軸周りの回転の生成子も以下のように求まります。
$$
J_1=
\left(
\begin{array}{ccc}
0 & 0 & 0\\
0 & 0 & -1\\
0 & 1 & 0\\
\end{array}
\right),\\
J_2=
\left(
\begin{array}{ccc}
0 & 0 & 1\\
0 & 0 & 0\\
-1 & 0 & 0\\
\end{array}
\right)
$$
つまり、2次元と違い、
$$
R_i(90^\circ)\ne J_i
$$
なのです。
面倒な話になってきました。
3次元回転行列を面倒だけど生成子から求めてみよう
2次元と同じように微分方程式を解くと、3次元回転行列が生成子から求まります。
ただ面倒な計算なので斜め読みで問題ありません。
面倒だなとだけ思ってもらえればOKです。
まず微分方程式です。1軸周りの回転の場合です。
$$
\boldsymbol{v}(\theta_1+d\theta_1,\theta_2,\theta_3)
=\boldsymbol{v}(\theta_1,\theta_2,\theta_3)+d\boldsymbol{x}(d\theta_1,0,0)
=\boldsymbol{v}+J_1\boldsymbol{x}d\theta_1
$$
1軸周り回転の生成子が満たす微分方程式は
$$
d\boldsymbol{v}_1
=J_1\boldsymbol{v}d\theta_1
$$
です。
2,3軸についても同じなので
$$
d\boldsymbol{v}_i
=J_i\boldsymbol{v}d\theta_i
$$
両辺を $d\theta_i$
で割ると
$$
\frac{d\boldsymbol{v}_i}{d\theta_i}
=J_i\boldsymbol{v}
$$
となります。
これを解くと
$$
\boldsymbol{v}(\theta_1+\Delta\theta_1,\theta_2,\theta_3)
=e^{J_1\Delta\theta_1}\boldsymbol{v}(\theta_1,\theta_2,\theta_3)
$$
つまり3次元回転行列は
$$
R_i(\Delta\theta_i) = e^{J_i\Delta\theta_i}
$$
のようになります。
ここまでは2次元の場合と同じです。
続いて、 $J_i$
の性質を見てみましょう。
3軸周りの回転を例にとります。
\begin{eqnarray}
J_3^2&=&
\left(
\begin{array}{ccc}
0 & -1 & 0\\
1 & 0 & 0\\
0 & 0 & 0\\
\end{array}
\right)
\left(
\begin{array}{ccc}
0 & -1 & 0\\
1 & 0 & 0\\
0 & 0 & 0\\
\end{array}
\right)\\
&=&
\left(
\begin{array}{ccc}
-1 & 0 & 0\\
0 & -1 & 0\\
0 & 0 & 0\\
\end{array}
\right)\\
&=&
\left(
\begin{array}{ccc}
-1 & 0 & 0\\
0 & -1 & 0\\
0 & 0 & -1\\
\end{array}
\right)
+
\left(
\begin{array}{ccc}
0 & 0 & 0\\
0 & 0 & 0\\
0 & 0 & 1\\
\end{array}
\right)\\
&=& -I +
\left(
\begin{array}{ccc}
0 & 0 & 0\\
0 & 0 & 0\\
0 & 0 & 1\\
\end{array}
\right)\\
&=& -I + D_3
\end{eqnarray}
ただし、
$$
D_3=
\left(
\begin{array}{ccc}
0 & 0 & 0\\
0 & 0 & 0\\
0 & 0 & 1\\
\end{array}
\right)
$$
と定義しました。
変な行列が出てきましたね。
この $D_3$
はどのような性質を持っているのでしょうか。
\begin{eqnarray}
D_3^2&=&
\left(
\begin{array}{ccc}
0 & 0 & 0\\
0 & 0 & 0\\
0 & 0 & 1\\
\end{array}
\right)
\left(
\begin{array}{ccc}
0 & 0 & 0\\
0 & 0 & 0\\
0 & 0 & 1\\
\end{array}
\right)\\
&=&
\left(
\begin{array}{ccc}
0 & 0 & 0\\
0 & 0 & 0\\
0 & 0 & 1\\
\end{array}
\right)\\
&=&D_3
\end{eqnarray}
なるほど。何乗しても値が変わらないようです。
これを踏まえると、 $J_3^3$
以上も計算できて、
\begin{eqnarray}
J_3^3&=&J_3^2J_3\\
&=&
\left(-I +
\left(
\begin{array}{ccc}
0 & 0 & 0\\
0 & 0 & 0\\
0 & 0 & 1\\
\end{array}
\right)
\right)
\left(
\begin{array}{ccc}
0 & -1 & 0\\
1 & 0 & 0\\
0 & 0 & 0\\
\end{array}
\right)\\
&=&
-J_3 +
\left(
\begin{array}{ccc}
0 & 0 & 0\\
0 & 0 & 0\\
0 & 0 & 1\\
\end{array}
\right)
\left(
\begin{array}{ccc}
0 & -1 & 0\\
1 & 0 & 0\\
0 & 0 & 0\\
\end{array}
\right)\\
&=&
-J_3 +
\left(
\begin{array}{ccc}
0 & 0 & 0\\
0 & 0 & 0\\
0 & 0 & 0\\
\end{array}
\right)\\
&=&-J_3,\\
J_3^4&=&J_3^3J_3
=-J_3J_3=-J_3^2=I-D_3,\\
J_3^5&=&J_3^4J_3
=-J_3^2J_3=-J_3^3=J_3,\\
J_3^6&=&J_3^5J_3
=J_3J_3=J_3^2=-I+D_3,\\
J_3^7&=&J_3^6J_3
=-J_3+D_3J_3=-J_3
\end{eqnarray}
あとはこの繰り返しです。
まとめると、 $n=1,2,3,...$
について、
\begin{eqnarray}
J_i^{2n+1}&=&(-1)^nJ_i\\
J_i^{2n}&=&(-1)^n(I-D_i)\\
J_i^0&=&I
\end{eqnarray}
となります。
というわけで $e^{J_i\theta_i}$
のテイラー展開ができるようになりました。
\begin{eqnarray}
R_i(\theta_i) &=& e^{J_i\theta_i}\\
&=&
\sum_{n=0}^\infty
\frac{1}{n!}J_i^n\theta_i^n\\
&=&
\frac{1}{0!}J_i^0\theta_i^0
+
\sum_{n=0}^\infty
\frac{1}{(2n+1)!}J_i^{2n+1}\theta_i^{2n+1}
+
\sum_{n=1}^\infty
\frac{1}{(2n)!}J_i^{2n}\theta_i^{2n}\\
&=&
I
+
J_i\sum_{n=0}^\infty
\frac{1}{(2n+1)!}(-1)^n\theta_i^{2n+1}
+
(I-D_i)
\sum_{n=1}^\infty
\frac{1}{(2n)!}(-1)^n\theta_i^{2n}\\
&=&
I-D_i + D_i
+
J_i\sum_{n=0}^\infty
\frac{1}{(2n+1)!}(-1)^n\theta_i^{2n+1}
+
(I-D_i)
\sum_{n=1}^\infty
\frac{1}{(2n)!}(-1)^n\theta_i^{2n}\\
&=&
D_i+
J_i
\mathrm{sin}\theta_i
+
(I-D_i)
\mathrm{cos}\theta_i
\end{eqnarray}
ややこしいですね。
ともかく、生成子から回転行列が計算できました。
例えば3軸周りの回転行列は
\begin{eqnarray}
R_3(\theta_3)
&=&
D_3+
J_3
\mathrm{sin}\theta_3
+
(I-D_3)
\mathrm{cos}\theta_3\\
&=&
\left(
\begin{array}{ccc}
\mathrm{cos}\theta_3 & -\mathrm{sin}\theta_3 & 0\\
\mathrm{sin}\theta_3 & \mathrm{cos}\theta_3 & 0\\
0 & 0 & 1\\
\end{array}
\right)
\end{eqnarray}
なぜこんなにややこしいかというと $J_i^2$
が $-I$
にならないからです。
$D_i$
という人が登場してしまいます。
登場人物が2次元では $J$
一人でしたが、 $J_i,D_i$
の計6人になっています。
もう少し減らすことはできないでしょうか。
パウリ行列
実は $J_i$
に一手間加えることで、 $D_i$
にご退場願うことができます。
混乱しないように、一手間加えた後の行列は $\sigma_i$
と呼びましょう。
$\sigma$
はギリシャ文字シグマ $\Sigma$
の小文字です。
今までベクトル $\boldsymbol{v}$
は3次元でした。
これにも一手間加えましょう。
ここに、 $\boldsymbol{v}$
は、いきなりで申し訳ないのですが、4つ目の成分があると考えてしまいましょう。
\begin{eqnarray}
\boldsymbol{v}&=&
\left(
\begin{array}{ccc}
v_1 \\
v_2 \\
v_3 \\
0 \\
\end{array}
\right)\\
&=&v_1\boldsymbol{e}_1
+v_2\boldsymbol{e}_2
+v_3\boldsymbol{e}_3
+0\boldsymbol{e}_4
\end{eqnarray}
です。4つ目の成分 $v_4$
はいつも0とします。
4成分のベクトルですが、実は3次元のベクトルを意味しています。
これを回転させるのですから、 $\sigma_i$
も4x4行列となります。
どんな行列でしょうか。
例によって3軸回転で考えます。
ベクトルの1,2,3成分は今まで通りに変わらないといけません。
つまり、
$$
\sigma_3=
\left(
\begin{array}{ccc}
0 & -1 & 0 & ?\\
1 & 0 & 0 & ?\\
0 & 0 & 0 & ?\\
? & ? & ? & ?\\
\end{array}
\right)
$$
です。
?には何が入っても、生成子をベクトルにかけた結果はこれまでと変わりません。
?を2次元の時と同じように $\sigma_3^2=-I$
になるように決めてやれば、計算が簡単になりそうです。
$$
\left(
\begin{array}{ccc}
0 & -1 \\
1 & 0 \\
\end{array}
\right)^2
=
\left(
\begin{array}{ccc}
-1 & 0 \\
0 & -1 \\
\end{array}
\right)
$$
だったことを思い出すと、もしかしてこうするといいのではないでしょうか。
$$
\sigma_3=
\left(
\begin{array}{ccc}
0 & 1 & 0 & 0\\
-1 & 0 & 0 & 0\\
0 & 0 & 0 & 1\\
0 & 0 & -1 & 0\\
\end{array}
\right)
$$
同じように $\sigma_1,\sigma_2$
も決めることができます。
$$
\sigma_1=
\left(
\begin{array}{ccc}
0 & 0 & 0 & 1\\
0 & 0 & -1 & 0\\
0 & 1 & 0 & 0\\
-1 & 0 & 0 & 0\\
\end{array}
\right),\\
\sigma_2=
\left(
\begin{array}{ccc}
0 & 0 & 1 & 0\\
0 & 0 & 0 & 1\\
-1 & 0 & 0 & 0\\
0 & -1 & 0 & 0\\
\end{array}
\right)
$$
すると、
$$
\sigma_1\sigma_1=-I,\\
\sigma_2\sigma_2=-I,\\
\sigma_3\sigma_3=-I,\\
$$
という関係をみんな満たせるようになりました。やった!
追加で以下のような関係も計算すれば簡単に求まります。
$$
\sigma_1\sigma_2=-\sigma_2\sigma_1=\sigma_3,\\
\sigma_2\sigma_3=-\sigma_3\sigma_2=\sigma_1,\\
\sigma_3\sigma_1=-\sigma_1\sigma_3=\sigma_2,\\
\sigma_1\sigma_2\sigma_3
=\sigma_2\sigma_3\sigma_1
=\sigma_3\sigma_1\sigma_2
=-I
$$
この $\sigma_i$
をパウリ行列 (Pauli matrices)と呼びます。
パウリさんが量子力学の研究で導入したためです。
(一般的なパウリ行列はここで導入した $\sigma_i$
とは見た目が異なりますが、本質的には変わりません)
クォータニオン
しかし、問題があります。
生成子はこれでいいのですが、肝心の回転行列が変なことになります。
$\sigma_i^2=-I$
なので、2次元回転の時と全く同じ計算で、
\begin{eqnarray}
?????R_3(\theta_3) &=& e^{\sigma_3\theta_3}\\
&=&
\left(
\begin{array}{cccc}
\mathrm{cos}\theta_3 & -\mathrm{sin}\theta_3 & 0 & 0 \\
\mathrm{sin}\theta_3 & \mathrm{cos}\theta_3 & 0 & 0 \\
0 & 0 & \mathrm{cos}\theta_3 & -\mathrm{sin}\theta_3 \\
0 & 0 & \mathrm{sin}\theta_3 & \mathrm{cos}\theta_3 \\
\end{array}
\right)\\
&=&I\mathrm{cos}\theta_3+\sigma_3\mathrm{sin}\theta_3
?????
\end{eqnarray}
おかしいですね。もともとの回転行列とは少し違う形になってしまいました。
何が悪かったのでしょうか。
2次元回転ではベクトルを行列にすると計算が簡単になりました。
3次元でも同じ方法は使えるでしょうか。
今回は2次元の時と違って、生成子が偶然にも3つあります。
これは基底の数と同じです。
そこで試しに3つの生成子 $\sigma_i$
をそのまま基底のように使ってみましょう。
つまり、
\begin{eqnarray}
\boldsymbol{v}&=&v_1\boldsymbol{e}_1+
v_2\boldsymbol{e}_2+
v_3\boldsymbol{e}_3+
0\boldsymbol{e}_4,\\
Q(\boldsymbol{v})&=&v_1\sigma_1+
v_2\sigma_2+
v_3\sigma_3+
0I
\end{eqnarray}
ということです。
$v_4$
は常に0のはずなので関係ないはずなのですが、一応行列にすると $I$
に対応しているとします。
ベクトルをこのルールで行列に変えてから、上で試しに作った回転行列らしき何か
\begin{eqnarray}
\rho_3(\theta_3) &=& e^{\sigma_3\theta_3}\\
&=&I\mathrm{cos}\theta_3+\sigma_3\mathrm{sin}\theta_3
\end{eqnarray}
をかけてみましょう。
ちなみに $\rho$
はrに当たるギリシャ文字「ロー」です。
まず $\rho_3(\theta_3)$
を $Q(\boldsymbol{v})$
に左からかけてみましょう。
\begin{eqnarray}
\rho_3(\theta_3)Q(\boldsymbol{v})
&=&(I\mathrm{cos}\theta_3+\sigma_3\mathrm{sin}\theta_3)
(v_1\sigma_1+v_2\sigma_2+v_3\sigma_3)\\
&=&v_1I\sigma_1\mathrm{cos}\theta_3
+v_2I\sigma_2\mathrm{cos}\theta_3
+v_3I\sigma_3\mathrm{cos}\theta_3
+v_1\sigma_3\sigma_1\mathrm{sin}\theta_3
+v_2\sigma_3\sigma_2\mathrm{sin}\theta_3
+v_3\sigma_3\sigma_3\mathrm{sin}\theta_3\\
&=&v_1\sigma_1\mathrm{cos}\theta_3
+v_2\sigma_2\mathrm{cos}\theta_3
+v_3\sigma_3\mathrm{cos}\theta_3
+v_1\sigma_2\mathrm{sin}\theta_3
-v_2\sigma_1\mathrm{sin}\theta_3
-v_3I\mathrm{sin}\theta_3\\
&=&\sigma_1(v_1\mathrm{cos}\theta_3
-v_2\mathrm{sin}\theta_3)
+\sigma_2(v_1\mathrm{sin}\theta_3
+v_2\mathrm{cos}\theta_3)
+\sigma_3 v_3\mathrm{cos}\theta_3
-I v_3\mathrm{sin}\theta_3\\
&=&Q(\boldsymbol{e}_1)(v_1\mathrm{cos}\theta_3
-v_2\mathrm{sin}\theta_3)
+Q(\boldsymbol{e}_2)(v_1\mathrm{sin}\theta_3
+v_2\mathrm{cos}\theta_3)
+Q(\boldsymbol{e}_3)v_3\mathrm{cos}\theta_3
-Q(\boldsymbol{e}_4)v_3\mathrm{sin}\theta_3\\
&=&Q(
\left(
\begin{array}{c}
v_1\mathrm{cos}\theta_3
-v_2\mathrm{sin}\theta_3\\
v_1\mathrm{sin}\theta_3
+v_2\mathrm{cos}\theta_3\\
v_3\mathrm{cos}\theta_3\\
-v_3\mathrm{sin}\theta_3\\
\end{array}
\right)
)
\end{eqnarray}
3軸回転を扱っているので、1,2成分だけが変化するはずが、第3成分が変化すると同時に、本来常に0であるべき第4成分が値を持ってしまっています。
計算の都合上、仮に4つ目の次元を導入しましたが、なんと、1,2軸平面で回転させたところ、勝手に4次元目の方向にも回転してしまったようです。
なんとか、4次元目への回転を打ち消す方法はないでしょうか。
今度は右からかけてみましょう。
\begin{eqnarray}
Q(\boldsymbol{v})\rho_3(\theta_3)
&=&(v_1\sigma_1+v_2\sigma_2+v_3\sigma_3)
(I\mathrm{cos}\theta_3+\sigma_3\mathrm{sin}\theta_3)\\
&=&v_1\sigma_1I\mathrm{cos}\theta_3
+v_1\sigma_1\sigma_3\mathrm{sin}\theta_3
+v_2\sigma_2I\mathrm{cos}\theta_3
+v_2\sigma_2\sigma_3\mathrm{sin}\theta_3
+v_3\sigma_3I\mathrm{cos}\theta_3
+v_3\sigma_3\sigma_3\mathrm{sin}\theta_3\\
&=&v_1\sigma_1\mathrm{cos}\theta_3
-v_1\sigma_2\mathrm{sin}\theta_3
+v_2\sigma_2\mathrm{cos}\theta_3
+v_2\sigma_1\mathrm{sin}\theta_3
+v_3\sigma_3\mathrm{cos}\theta_3
-v_3I\mathrm{sin}\theta_3\\
&=&\sigma_1(v_1\mathrm{cos}\theta_3
+v_2\mathrm{sin}\theta_3)
+\sigma_2(-v_1\mathrm{sin}\theta_3
+v_2\mathrm{cos}\theta_3)
+\sigma_3 v_3\mathrm{cos}\theta_3
-I v_3\mathrm{sin}\theta_3\\
&=&Q(\boldsymbol{e}_1)(v_1\mathrm{cos}\theta_3
+v_2\mathrm{sin}\theta_3)
+Q(\boldsymbol{e}_2)(-v_1\mathrm{sin}\theta_3
+v_2\mathrm{cos}\theta_3)
+Q(\boldsymbol{e}_3)v_3\mathrm{cos}\theta_3
-Q(\boldsymbol{e}_4)v_3\mathrm{sin}\theta_3\\
&=&Q(
\left(
\begin{array}{c}
v_1\mathrm{cos}\theta_3
+v_2\mathrm{sin}\theta_3\\
-v_1\mathrm{sin}\theta_3
+v_2\mathrm{cos}\theta_3\\
v_3\mathrm{cos}\theta_3\\
-v_3\mathrm{sin}\theta_3\\
\end{array}
\right)
)\\
&=&Q(
\left(
\begin{array}{c}
v_1\mathrm{cos}(-\theta_3)
-v_2\mathrm{sin}(-\theta_3)\\
v_1\mathrm{sin}(-\theta_3)
+v_2\mathrm{cos}(-\theta_3)\\
v_3\mathrm{cos}\theta_3\\
-v_3\mathrm{sin}\theta_3\\
\end{array}
\right)
)
\end{eqnarray}
なかなか面白いことになりました。
1,2成分は元の逆回転になっているのに、3,4成分は逆になっていません。
しかし、思い出してみると、私たちは3,4成分の回転を打ち消したかったのです。
この性質は使えそうです。
今度は右から逆回転 $\rho_3(\theta_3)^*=\rho_3(-\theta_3)$
をかけるとどうなるでしょうか。
\begin{eqnarray}
Q(\boldsymbol{v})\rho_3(\theta_3)^*
&=&Q(\boldsymbol{v})\rho_3(-\theta_3)\\
&=&Q(
\left(
\begin{array}{c}
v_1\mathrm{cos}\theta_3
-v_2\mathrm{sin}\theta_3\\
v_1\mathrm{sin}\theta_3
+v_2\mathrm{cos}\theta_3\\
v_3\mathrm{cos}(-\theta_3)\\
-v_3\mathrm{sin}(-\theta_3)\\
\end{array}
\right)
)
\end{eqnarray}
これです! 左から $\rho_3$
をかけた時に余計だった3,4成分の回転を元に戻してくれています。
左から $\rho_3$
をかけた後に右から $\rho_3^*$
をかけると3,4成分については解決です。
逆に1,2成分は倍回転してしまいますが、仕方ありません。
あらかじめ回転角を2で割っておくことにしましょう。
というわけでまとめると、
$$
Q(R_i(\theta_i)\boldsymbol{v})=
\rho_i({\frac{\theta_i}{2}})Q(\boldsymbol{v})\rho_i(\frac{\theta_i}{2})^*
$$
のようになります。
3次元ベクトルの回転は、4次元の行列の回転に拡張して考えると、半分の回転を左から、逆の半分の回転を右からかけることで実現できるのです。
一般的には、
\begin{eqnarray}
1&=&I,\\
i&=&\sigma_1,\\
j&=&\sigma_2,\\
k&=&\sigma_3
\end{eqnarray}
という表記法を用います。
こう書いた場合、今まで出てきたような
$$
q=w+xi+yj+zk
$$
のような値をクォータニオン(quaternion)あるいは日本語で四元数(しげんすう)と呼びます。
普通のベクトルは以下のように $Q()$
で変換することで、w成分が0のクォータニオンとして扱います。
\begin{eqnarray}
\boldsymbol{v}&=&v_1\boldsymbol{e}_1+
v_2\boldsymbol{e}_2+
v_3\boldsymbol{e}_3,\\
Q(\boldsymbol{v})&=&v_1i+v_2j+v_3k
\end{eqnarray}
ちなみに
$$
q=w+xi+yj+zk
$$
というクォータニオンがあるとき、 $w$
を実部(real part)またはスカラー部(scalar part)、 $xi+yj+zk$
を虚部(imaginary part)またはベクトル部(vector part)と呼びます。
2次元回転で出てきた複素数と似ていますが、虚部が1つではなく複数ある形をしています。
このようなものを超複素数(hypercomplex number)と呼びます。
つまりクォータニオンは超複素数の一種ということです。
先ほど説明したように、クォータニオンを用いた回転は $\rho_i(\theta_i/2)$
で表されます。
これを三角関数を用いて表すと、
$$
\rho_i(\frac{\theta_i}{2})
=\mathrm{cos}\frac{\theta_i}{2}+\sigma_i\mathrm{sin}\frac{\theta_i}{2}
$$
のようになります。
これで、x,y,zいずれかの軸周りの回転はできました。
任意軸周りの回転クォータニオン(工事中)
では何らかのベクトル $\boldsymbol{a}$
周りの回転を表すクォータニオンはどうすれば作れるでしょうか。
クォータニオンの内積
クォータニオンにも内積を考えることができます。
ベクトルの内積は、各成分をそれぞれかけたものを足し合わせればいいのでした。
$$
\boldsymbol{v}=
v_1\boldsymbol{e}_1+
v_2\boldsymbol{e}_2+
v_3\boldsymbol{e}_3,\\
\boldsymbol{u}=
u_1\boldsymbol{e}_1+
u_2\boldsymbol{e}_2+
u_3\boldsymbol{e}_3,\\
\boldsymbol{v}\cdot\boldsymbol{u}=
v_1 u_1+
v_2 u_2+
v_3 u_3
$$
クォータニオンも同じルールです。
$$
q_1=w_1+x_1i+y_1j+z_1k,\\
q_2=w_2+x_2i+y_2j+z_2k,\\
q_1\cdot q_2=w_1w_2+x_1x_2+y_1y_2+z_1z_2
$$
結果はベクトルの内積と同じでスカラーになります。
ベクトルの内積と違って、実部も入れるのを忘れないようにしましょう。
クォータニオンの長さとベルソル(工事中)
すみません。工事中です。
回転クォータニオンの幾何学的解釈(工事中)
すみません。工事中です。
球面線形補間(工事中)
すみません。工事中です。