四元数による回転表現

四元数とは

 一般的に用いられる複素数は実数 \(a,b\)と虚数単位 \(i\) を用いて \(a+bi\)のように表します。これは実数\(1\)と虚数\(i\)という独立な二つの元を使った数体系です。一方、四元数 (quaternion) とは虚数を三つに増やした数体系です。実数 \(a,b,c,d\)と虚数単位 \(i,j,k\) を用いて$$a+bi+cj+dk$$

のように表現します。虚数単位 \(i,j,k\) には次のような等式$$ i^2 = j^2 = k^2 = i j k = -1$$が成立します(というかそのように定義します)。これを変形すれば、$$ij=k, ji=-k, jk=i, kj=-i, ki=j, ik=-j$$という関係も得られます。演算が可換でない(計算順序が異なると答えが異なる)ことに注意しましょう。

 四元数同士の演算は通常の線形代数ルールに則っており直観的です。すなわち加算は$$
a_1+b_1i+c_1j+d_1k + a_2+b_2i+c_2j+d_2k= (a_1+a_2)+(b_1+b_2)i+(c_1+c_2)j+(d_1+d_2)k
$$となり、乗算については$$ \begin{array}{l}
(a_1+b_1i+c_1j+d_1k)(a_2+b_2i+c_2j+d_2k)= \\
\ a_1a_2-b_1b_2-c_1c_2-d_1d_2 +(a_1b_2+b_1a_2+c_1d_2-d_1c_2)i
+(a_1c_2-b_1d_2+c_1a_2+d_1b_2)j + (a_1d_2+b_1c_2-c_1b_2+d_1a_2)k
\end{array}
$$となります1。加算と乗算はともに結合測が成立します2

 四元数の共役量は通常の複素数と同じく虚数成分の符号を反転したものと定義します。すなわちある四元数\(Q\)に対する共役四元数 \(Q^*\)は、$$Q =a+bi+cj+dk \quad \leftrightarrow \quad Q^* =a-bi-cj-dk$$となります。また\(Q\)と \(Q^*\)の積は、$$Q Q^* =Q^* Q =a^2+b^2+c^2+d^2$$となり、これの平方根をノルム$$||Q||= \sqrt{Q^* Q} = \sqrt{Q Q^*}$$と定義します。要するに4次元空間での距離です。ゼロでない四元数の逆数は$$Q^{-1}=Q^*/||Q||^2$$と定義され必ず一つに定まり、$$ Q Q^{-1} = Q^{-1} Q =1$$という性質を持ちます。ノルムが1の四元数を単位四元数とよび、単位四元数の共役は逆数でもあります。すなわち\(||Q||=1\)の時\(Q^{-1}=Q^*\)です。

単位四元数と回転変換

 通常の複素数 \(a+bi\)にノルムが1の複素数 \(e^{i\theta}\)を作用させると、原点中心の回転変換になるということは高校数学の範囲でご存じと思います。つまり平面(2次元)の回転はノルムが1の複素数で表現できます。それでは元を一つ増やして三元数にすれば3次元の回転を表現できるのでは、と当然思いますよね。ところが偉大な数学者ハミルトンによる研究の結果、三元数の代数構造は乗算の計算に矛盾が生ずるため閉じた数体系を作ることができない3こと、さらに四元数であればその矛盾が解消され数学的な整合性が保たれることが発見されています。四元数こそが3次元空間を適切に記述する代数的構造です。ここでは四元数と回転変換の関係を説明します。

 まず、四元数をベクトルのように$$a+bi+cj+dk=(a,b,c,d)$$と表記することにします。単位四元数とは以下のように定義されるノルム (複素四次元空間での長さ)が1の四元数のことでした。$$ (a, b, c, d) \quad \textrm{where} \ a^2+b^2+c^2+d^2=1$$

ということは、次のように記号を置き換えた四元数\(P\)も、当然単位四元数です。$$
P=(\cos\frac{\theta}{2}, x\sin\frac{\theta}{2}, y\sin\frac{\theta}{2}, z\sin\frac{\theta}{2}), \quad \textrm{where} \ x^2+y^2+z^2=1
$$ここで二つの四元数 \(A, B\)がこの単位四元数\(P (\theta, x,y,z)\)に関して共役である、すなわち$$B=PAP^*$$であるとします。また\(A\)が実部がゼロの四元数 \( (0, X,Y,Z)\)であるとします。書き下すと$$
B=(\cos\frac{\theta}{2}, x\sin\frac{\theta}{2}, y\sin\frac{\theta}{2}, z\sin\frac{\theta}{2})\ (0,X,Y,Z)\ (\cos\frac{\theta}{2}, -x\sin\frac{\theta}{2}, -y\sin\frac{\theta}{2}, -z\sin\frac{\theta}{2})
$$ということです (並べた四元数は乗算のルールで演算)。これを気合を入れて計算4すると、$$\begin{array}{l}B=(0,\\
\qquad X\cos\theta +(yZ-zY)\sin\theta + x(xX+yY+zZ)(1-\cos\theta),\\
\qquad Y\cos\theta +(zX-xZ)\sin\theta + y(xX+yY+zZ)(1-\cos\theta),\\
\qquad Z\cos\theta +(xY-yX)\sin\theta + z(xX+yY+zZ)(1-\cos\theta) \quad)\\
\quad=(0,\\
\qquad X(x^2(1-\cos\theta) + \cos\theta) +Y(x y(1-\cos\theta) – z\sin\theta)+Z(zx (1-\cos\theta) + y \sin\theta),\\
\qquad X(x y (1-\cos\theta) + z\sin\theta) +Y(y^2 (1-\cos\theta) +\cos\theta) + Z(yz (1-\cos\theta) – x \sin\theta),\\
\qquad X(z x (1-\cos\theta) – y\sin\theta) + Y(yz(1-\cos\theta) + x\sin\theta) + Z(z^2 (1-\cos\theta)+\cos\theta)\quad)
\end{array}$$が得られます。得られた虚部の三つの成分(\(X’,Y’,Z’\))に注目しましょう。これは前ページで説明した回転行列を(\(X,Y,Z\))に作用させた結果に他なりません。$$
\begin{pmatrix}X’\\Y’\\Z’\end{pmatrix}=
\begin{pmatrix}
x^2(1-\cos\theta) + \cos\theta &
x y(1-\cos\theta) – z \sin\theta &
z x (1-\cos\theta) + y \sin\theta\\
x y (1-\cos\theta) + z \sin\theta&
y^2 (1-\cos\theta) + \cos\theta&
y z (1-\cos\theta) – x \sin\theta\\
z x (1-\cos\theta) – y \sin\theta&
y z (1-\cos\theta) + x \sin\theta&
z^2 (1-\cos\theta) + \cos\theta
\end{pmatrix}
\begin{pmatrix}X\\Y\\Z\end{pmatrix}
$$つまり、\(B=PAP^*\)という変換は、単位ベクトル\((x,y,z)\)の周りに角度\(\theta\)だけ回転するという操作に対応するのです。

二つの単位四元数のなす角度

単位四元数が回転状態を表す量であるということはご理解頂けたと思います。それでは二つの単位四元数があったとき、両者の角度 (二つの回転状態を結ぶ最小の回転角度) はどのような関係になるでしょうか。


  1. 愚直に書き下せば$$ \begin{array}{l}
    (a_1+b_1i+c_1j+d_1k)(a_2+b_2i+c_2j+d_2k) \\
    \quad =a_1a_2+a_1b_2i+a_1c_2j+a_1d_2k + b_1a_2i+b_1b_2i^2+b_1c_2ij+b_1d_2ik\\
    \qquad +c_1a_2j+c_1b_2ji+c_1c_2j^2+d_2jk + d_1a_2k+d_1b_2ki+d_1c_2kj+d_1d_2k^2\\
    \quad =a_1a_2-b_1b_2-c_1c_2-d_1d_2 +(a_1b_2+b_1a_2+c_1d_2-d_1c_2)i \\
    \qquad +(a_1c_2-b_1d_2+c_1a_2+d_1b_2)j + (a_1d_2+b_1c_2-c_1b_2+d_1a_2)k
    \end{array}$$ ↩︎
  2. 3つの四元数を\(A,B,C\)としたとき\((A+B)+C=A+(B+C)\), \((AB)C=A(BC)\)が成立。 ↩︎
  3. https://qiita.com/OmojiP/items/f1d3320483462907a796に詳しく解説されています。 ↩︎
  4. もちろん私の能力だけでは足りずAIに頼りました。倍角の公式によって\(\theta/2\)は消え\(\theta\)が現れます。 ↩︎

contents