RSS

回転とクォータニオン

  • (2017年12月4日(月) 午後11時20分57秒 更新)

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
\]
結果はベクトルの内積と同じでスカラーになります。
ベクトルの内積と違って、実部も入れるのを忘れないようにしましょう。

クォータニオンの長さとベルソル(工事中)

すみません。工事中です。

回転クォータニオンの幾何学的解釈(工事中)

すみません。工事中です。

球面線形補間(工事中)

すみません。工事中です。

このページのトップへ