通常の複素数は実数 \(a,b\) と虚数単位 \(i\) を用いて \(a+bi\) のように表します。これは実数 \(1\) と虚数 \(i\) という独立な二つの元を使った数体系です。また、ある複素数 \(a+bi\) にノルム (複素平面上で原点からの距離) が1 の複素数 \(e^{i\theta}\) を作用させると、原点中心の回転変換になるということは高校数学の範囲でご存じと思います。つまり平面(2次元)の回転はノルムが1の複素数で表現できます。それでは元 (虚数単元) を一つ増やして三元数にすれば3次元の回転を表現できるのでは、と当然思いますよね。ところが偉大な数学者ハミルトンによる研究の結果、三元数の代数構造は乗算の計算に矛盾が生ずるため閉じた数体系を作ることができない1こと、さらに四元数であればその矛盾が解消され数学的な整合性が保たれることが発見されています。四元数こそが3次元空間を適切に記述する代数的構造です。ここでは四元数と回転変換の関係を説明します。
四元数とは
四元数 (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}
$$となります2。加算と乗算はともに結合測が成立します3。
四元数はベクトルのように$$a+bi+cj+dk=(a,b,c,d)$$と表記するのが一般的です。さらに、実部(ひとつ)と虚部(みっつ)をそれぞれスカラー量 \(s = a\) と ベクトル量 \(\textbf{v}=(b,c,d)\) に書き換えて$$(a,b,c,d)=(s, \textbf{v})$$と表記することもあります。この表記を採用すると、四元数の加算と乗算はそれぞれ$$
(s_1, \textbf{v}_1)+(s_2, \textbf{v}_2)=(s_1+s_2, \textbf{v}_1+\textbf{v}_2)\\
(s_1, \textbf{v}_1)(s_2, \textbf{v}_2)=(s_1s_2-\textbf{v}_1\cdot\textbf{v}_2, s_1\textbf{v}_2+s_2\textbf{v}_1+\textbf{v}_1\times\textbf{v}_2)$$と表現することができます。以降は \(s\) を四元数の「実部」あるいは「スカラー」、 \(\textbf{v}\)を「虚部」、「虚部ベクトル」、あるいは単に「ベクトル」と呼びます。
四元数の共役量は通常の複素数と同じく虚数の符号を反転したものと定義します。すなわちある四元数\(Q\)に対する共役四元数 \(Q^*\)は、$$Q =(a,b,c,d)=(s, \textbf{v}) \quad \leftrightarrow \quad Q^* =(a,-b,-c,-d)=(s, -\textbf{v}) $$となります。また\(Q\)と \(Q^*\)の積は、$$Q Q^* =Q^* Q =a^2+b^2+c^2+d^2=s^2+\|\textbf{v}\|^2$$となり、これの平方根をノルム$$\|Q\|= \sqrt{Q^* Q} = \sqrt{Q Q^*}$$と定義します。要するに4次元空間での距離です。ゼロでない四元数の逆数は$$Q^{-1}=Q^*/\|Q\|^2$$と定義され必ず一つに定まり、$$ Q Q^{-1} = Q^{-1} Q =1$$という性質を持ちます。ノルムが1の四元数を単位四元数とよび、単位四元数の共役は逆数でもあります。すなわち$$\|Q\|=1 \quad \leftrightarrow \quad Q^{-1}=Q^*$$です。
単位四元数と回転変換
単位四元数とは以下のように定義されるノルム (複素四次元空間での長さ)が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\)に関して共役である$$B=PAP^*$$としましょう。さらに\(A\)は実部がゼロの四元数4 \( (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})
$$ということです (並べた四元数は乗算のルールで演算)。これを計算5すると、$$\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^*\) によって得られる \(B\) の虚部ベクトルは、\(A\) の虚部ベクトルを \(P\) の虚部ベクトル \((x,y,z)\) に沿って \(\theta\) だけ回転した量だということです。
なお、単位四元数を回転の状態を表す量と捉えたとき、\(P\)と\(-P\) を区別することはできません。なぜなら 「\((x,y,z)\)を軸とする角度\(\theta\)の回転」は「\((-x,-y,-z)\)を軸とする角度\(-\theta\)の回転」と等価だからです。$$
PAP^*= (-P)A(-P)^*
$$
二つの単位四元数のなす角度差
単位四元数が回転状態を表す量であるということはご理解頂けたと思います。それでは二つの単位四元数が与えられたとき、両者の角度差 (二つの回転状態を結ぶ最小の回転角度、ミスオリエンテーション、miss-orientation) はどのように求めたらいいでしょうか。
まず二つの回転状態を表す単位四元数を \(P,Q\)とし、実部がゼロの任意の四元数を\(A\)とします。\(A\)の虚部ベクトルが \(P\) と \(Q\) によって回転すると、それぞれ \(PAP^*\)と\(QAQ^*\)に写ります。ここまでは前節のおさらいですね。さてここで\(R\) という単位四元数が \(P \rightarrow Q\) という回転に対応するとします。この時、全ての\(A\)について$$R(PAP^*)R^*=QAQ^*$$という関係を満たさねばならず、ということは$$RP=Q\quad \rightarrow \quad R=QP^*$$が得られます。また求めたい量が \(P \rightarrow Q\) の回転角度 \(\theta\) だけであれば、\(R\)の全成分を知る必要はなく実部(\(\cos(\theta/2)\))を求めるだけで十分です。あらためて$$P=(a_1,b_1,c_1,d_1), \qquad Q=(a_2,b_2,c_2,d_2)$$と定義すれば$$
\textrm{Re}(QP^*)=a_1a_2+b_1b_2+c_1c_2+d_1d_2=\cos(\frac{\theta}{2})\\\rightarrow \theta = 2\arccos(a_1a_2+b_1b_2+c_1c_2+d_1d_2)$$となります。なお、\(\textrm{Re}\)は四元数の実部を求める関数です。ここで、ベクトルの内積公式との類似性にお気づきになった方が多いのではないでしょうか。実空間では、二つの単位ベクトルを \(\vec{u}=(a_1, b_1, c_1,…)\)と \(\vec{v}=(a_2, b_2, c_2,…)\) とし、さらにそれらがなす角\(\theta\) とすると$$
\vec{u} \cdot \vec{v} = a_1a_2+ b_1b_2+ c_1c_2+… = \cos\theta
$$という関係になるのでした。一方、\( \textrm{Re}(QP^*)=a_1a_2+b_1b_2+c_1c_2+d_1d_2=\cos(\frac{\theta}{2})\)という量は \(P,Q\)を四元数ではなく4次元ベクトルと捉えたときの内積に相当します。\(\cos(\theta)\)と\(\cos(\theta/2)\) の違いこそあれ、とてもよく似ていることに感動を覚えますね。もう少し深堀したいところですが私の能力には持て余す話題ですので、解説は他に譲ります6。
角度差の分布
最後に単位四元数の性質を利用してランダムな方位状態における角度差の分布について考えてみましょう。数式だけだとイメージしにくいと思いますので、何らかの形状を持つ物体を例に説明します。例えば、次のような宇宙飛行士について考えてみましょう。この宇宙飛行士は、上下左右は非対称であり、恒等変換以外の対称要素は有さない形状をしているとします。

このような宇宙飛行士が大量に存在し、そしてそれらが完全にランダムな姿勢で漂っている状況を考えます。その中から任意の二人の宇宙飛行士を選び、それらの姿勢の角度差 (平行移動は考慮しない) を算出したとしましょう。このとき、角度差の確率分布はどのように関数になるでしょうか?

このような問題を考えるとき単位四元数の概念が役に立ちます。まず、単位四元数は回転の状態を表しますから、全ての宇宙飛行士の姿勢は何らかの単位四元数に対応します。また、単位四元数を4次元 (四元数の各成分を各次元に割り当てた空間) における単位球面上の点と考えれば、ランダムな方位(姿勢)状態とは4次元単位球面上に一様に分布した点集合に対応します。さらに、二つの点を任意に選ぶのではなく、ひとつは固定しもう一つを任意に選ぶ、と言い換えても一般性を失いません。つまりこの問題は、「4次元球面上のある一点から角度\(\phi\)だけ離れた点を見出す確率はなにか」、という問題と等価なのです。なお、4次元単位球面上の2点 (ベクトル)のなす角 \(\phi\) と回転状態の角度差 \(\theta\) には、\(\phi=\theta/2\) の関係があることにご注意ください。
それではこの方針に沿って答えを導いてみましょう。まず4次元単位球面上から北極点 (のような点) \(P\) を選びます。北極点 \(P\) から角度 \(\phi\) だけ隔たった点集合は (緯線ではなく) 緯面を形成します。この緯面は3次元球面であり7その半径は \(\sqrt{1-\cos^2\phi}=\sin\phi\)ですから面積は\(4\pi \sin^2\phi\)ということになります。つまり方位差分布関数\(F(\phi)\)は \(\sin^2\phi\) に比例します。また、南極点 \(-P\) は北極点 \(P\) と等価な回転状態ですから、南半球上の点は南極点 \(-P\) からの角度で考えるべきです。すなわち、\(\phi\) の範囲は \(0\sim\pi/2\) (北半球のみ)で十分ということになります。最後に \(\phi=\theta/2\) を代入して全体を規格化すると以下のような方位差分布関数\(F(\theta)\)が得られます。
$$F(\theta)=\frac{2}{\pi}\sin^2\frac{\theta}{2} =\frac{1-\cos\theta}{\pi}\\ \qquad \textrm{where}\ 0\le\theta\le\pi $$
次の図は横軸をラディアンではなく度で表示しています。方位角度差が小さい (\(\theta\)が小さい) 状態を見出す確率は低く、大きい状態ほど高くなり、180度で緩やかに上限に達するという傾向は、直感的にも理解が容易かと思われます。

- https://qiita.com/OmojiP/items/f1d3320483462907a796に詳しく解説されています。 ↩︎
- 愚直に書き下せば$$ \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}$$ ↩︎ - 3つの四元数を\(A,B,C\)としたとき\((A+B)+C=A+(B+C)\), \((AB)C=A(BC)\)が成立。 ↩︎
- 実部がゼロの四元数を純虚四元数 (pure imaginary quaternion) といいます。 ↩︎
- もちろん私の能力だけでは足りずAIに頼りました。倍角の公式によって\(\theta/2\)は消え\(\theta\)が現れます。 ↩︎
- https://kt-project.com/wp/math/number-theory/quartanion/math4-3/ ↩︎
- 3次元球における緯線は2次元の円ですから、そこから次元が一つ上がったと考えてください。 ↩︎