$$ \def\v{\boldsymbol} \def\m{\boldsymbol} \def\trans{^\mathsf{T}} \def\inv{^{-1}} \def\bmat{\begin{pmatrix}} \def\emat{\end{pmatrix}} \def\diag{\operatorname{diag}} \def\tr{\operatorname{tr}} \def\ad{\operatorname{ad}} \def\Ad{\operatorname{Ad}} \def\E{\operatorname{E}} \def\det#1{| #1 |} \def\her{^\mathsf{H}} \def\wed{\wedge} \def\given{\mid} \def\defeq{\triangleq} \def\Ys{{\cal Y}} \def\argmin{\mathop{\mathrm{argmin}}} \def\argmax{\mathop{\mathrm{argmax}}} \def\blockdiag{\mathop{\mathrm{blockdiag}}} \def\inner#1{\langle #1 \rangle} $$

CV・CG・ロボティクスのためのリー群・リー代数入門: (7) 四元数

シリーズ一覧へ

前回のエントリへ


四元数 (クォータニオン) やその計算について説明する文献は多い.その計算によって 3 次元回転を表せることを,ベクトル幾何などの手段で示している文献も多い.しかし,四元数の定義がどこからやってきたのかを説明してくれているものはそれほど多くない.

数学者ハミルトンがある日突然思いついて思わず橋に数式を刻んだとかそういう逸話が有名なこともあって,何やら天才のもとに天啓として理由もなく降りてきた神の定義であり,人間ごときがその背景を考えてもしかたない的な認識をされることが多いように思うのだが,実はそんなことはなく,これまでのエントリで積み上げてきたリー群・リー代数の知識を総動員することで論理的に導くことができる.

四元数の定義

回転ベクトルと同様の「回転角と回転軸」に関する情報を,全く違った形式で表現するのが四元数である.四元数の定義や計算についてはたくさんの書籍やウェブサイトで説明されているので,ここでは最低限の知識だけを列挙する.

四元数 四元数は $$ \begin{align} \v{q} &= q_0 + q_1 \mathbf{i} + q_2 \mathbf{j} + q_3 \mathbf{k} \end{align} $$ で定義される.ここで $q_0, q_1, q_2, q_3$ はいずれも実数であり,$\mathbf{i}, \mathbf{j}, \mathbf{k}$ は $$ \begin{align} \mathbf{i}^2 &= \mathbf{j}^2 = \mathbf{k}^2 = -1\\ \mathbf{i}\mathbf{j} &= - \mathbf{j}\mathbf{i} = \mathbf{k}\\ \mathbf{j}\mathbf{k} &= - \mathbf{k}\mathbf{j} = \mathbf{i}\\ \mathbf{k}\mathbf{i} &= - \mathbf{i}\mathbf{k} = \mathbf{j} \end{align} $$ を満たす数とする.

上の規則から見て取れるように,$\mathbf{i}, \mathbf{j}, \mathbf{k}$ どうしの積については交換則が成り立たないことに注意を要する.それ以外については,普通の数式と同様に結合則,分配則,交換則が成り立つものとして進めてよい.


四元数は 3 次元空間のベクトルと 3 次元空間の回転の両方を表すことができる.3 次元ベクトル $(p_1, p_2, p_3)\trans$ 表す四元数
$$
\begin{align}
\v{p} &= p_1 \mathbf{i} + p_2 \mathbf{j} + p_3 \mathbf{k}
\end{align}
$$ である.これを,純虚数に倣って四元数と呼ぶことがある.ベクトルの定数倍や和は普通に計算すればよい.

一方,単位ベクトル $\v{w} = (w_1, w_2, w_3)\trans$ を軸とする角度 $\theta$ の 3 次元回転を表す四元数
$$
\begin{align}
\v{q} &= \cos\frac{\theta}{2} + (w_1 \mathbf{i} + w_2 \mathbf{j} + w_3 \mathbf {k})\sin\frac{\theta}{2}
\end{align}
$$ である.$\displaystyle (q_0, q_1, q_2, q_3) = (\cos\frac{\theta}{2}, w_1\sin\frac{\theta}{2}, w_2\sin\frac{\theta}{2}, w_3\sin\frac{\theta}{2})$ とおいたことになる.$(w_1, w_2, w_3)\trans$ を単位ベクトルに取っていることと,$\cos^2(\theta/2) + \sin^2(\theta/2) = 1$ でなくてはならないことから,$q_0^2 + q_1^2 + q_2^2 + q_3^2 = 1$ が要求される.これを満たす $\v{q}$ を単位四元数と呼ぶ.

四元数 $\v{p}$ が表すベクトルを単位四元数 $\v{q}$ で回転するには,
$$
\begin{align}
\v{p}' &= \v{q} \v{p} \v{q}\inv
\end{align}
$$ を計算する.ただし $\v{q}\inv$ は $\v{q} \v{q}\inv = \v{q}\inv \v{q} = 1$ となるような数,すなわち $\v{q}$ の逆元であり,$\v{q} = q_0 + q_1 \mathbf{i} + q_2 \mathbf{j} + q_3 \mathbf{k}$ が単位四元数の場合は,その共役四元数
$$
\begin{align}
\bar{\v{q}} &= q_0 - q_1 \mathbf{i} - q_2 \mathbf{j} - q_3 \mathbf{k}
\end{align}
$$ で与えられる.

回転を表す 2 つの四元数の合成は
$$
\begin{align}
\v{q} &= \v{q}_2 \v{q}_1
\end{align}
$$ を計算することで得られる.回転ベクトルではこのような簡単な合成はできなかった.また,2 つの四元数の間を補間をするのも比較的簡単で,これは回転ベクトルはおろか回転行列ですら簡単にできることではなかった.この辺がコンピュータグラフィックスでよく使われる理由だと思われる.

$SU(2)$ と $\mathfrak{su}(2)$

さて,ここで四元数の知識をいったん忘れて,リー群・リー代数の知識から四元数の概念にたどりつくことを試みる.そのために,まず 3 次元回転 $SO(3)$ と同じ構造を持つ別のリー群を見つけたい.

本気でやるならば,そのようなリー群を網羅的に列挙する議論に踏み込むことになる.実際,数学書や物理学寄りの教科書の多くでそのような議論が扱われている (量子力学と密接に関連するため,物理屋さんにとっては必須の話である).が,四元数を理解するだけの目的で踏み込むにはちょっと重すぎる (個人の感想です).

というわけで,ここではもっと発見的な議論によって進めてみようと思う.

2 次元回転からの類推で考えてみよう.2 次元回転が振幅 1 の複素数 $\exp i\theta$ で表せることは,複素平面の扱いを学んだ人ならよく知っている.このことを群の表現の言葉で言い換えるならば,
$$
\begin{align}
\psi : \exp{i\theta} &\mapsto \m{R}(\theta) = \bmat
\cos\theta & -\sin\theta\\
\sin\theta & \cos\theta\\
\emat
\end{align}
$$ という写像を考えたとき,$\psi(\exp{i \theta_1} \exp{i \theta_2}) = \psi(\exp{i \theta_1}) \psi(\exp{i \theta_2})$ が成り立つ.つまり $\m{R}(\theta)$ が $\exp i\theta$ の群としての表現になっている.

振幅 1 の複素数というのは $1 \times 1$ のユニタリ行列と見なせる.つまり $SO(2)$ の元を $U(1)$ の元の表現とすることができる.

だったら $SO(3)$ についても同じようなことが言えるのではなかろうか.

$U(1)$ から次数を 1 つ挙げた 2 次ユニタリ行列の集合 $U(2)$ を考えてみよう.$U(2)$ のリー代数 $\mathfrak{u}(2)$ は歪エルミート行列の全体である.その元を
$$
\begin{align}
\m{H} &= \bmat
h_{11} & h_{12} \\
h_{21} & h_{22} \\
\emat
\end{align}
$$ と書く.4 つの要素がそれぞれ実部と虚部を持つので 8 つの自由度があるが,$\m{H}\her = -\m{H}$ より
$$
\begin{align}
h_{11} &= - \bar{h}_{11}\\
h_{22} &= - \bar{h}_{22}\\
h_{12} &= - \bar{h}_{12}
\end{align}
$$ という制約が生じる.最初の 2 式は対角要素が純虚数であることを意味するので 2 自由度減り,最後の式は非対角要素の一方が定まれば他方は自動的に定まることを意味するのでさらに 2 自由度減る.結局 4 自由度が残る.

ということは $SO(3)$ の 3 自由度より 1 個多いので,もうちょっと制約をつけたい.では $SU(2)$ を考えてみよう.$\mathfrak{su}(2)$ にはさらにトレースが 0 という制約 $h_{11} = - h_{22}$ が追加されるが,対角要素は既に純虚数に制約されていたので減る自由度は 1 であり,都合 $SO(3)$ と同じ 3 自由度が残ることになる.自由度の数が一致したからといってまだ何かが言えるわけではないが,ちょっと考えてみる価値があるのではなかろうか.


というわけで,改めて $h_1, h_2, h_3 \in \mathbb{R}$ を使って $\mathfrak{su}(2)$ の元を
$$
\begin{align}
\m{H} &= \bmat
i h_3 & - h_2 + ih_1 \\
h_2 + ih_1 & - i h_3\\
\emat
\end{align}
$$ と書くことにする.ここで $ \m{S}_1 = \bmat
0 & i\\
i & 0\\
\emat$,$\m{S}_2 = \bmat
0 & -1\\
1 & 0 \\
\emat$,$\m{S}_3 = \bmat
i & 0 \\
0 & -i\\
\emat $ とすると,任意の $\m{H} \in \mathfrak{su}(2)$ が
$$
\begin{align}
\m{H} &= h_1 \m{S}_1 + h_2 \m{S}_2 + h_3 \m{S}_3
\end{align}
$$ と一意に表せる.したがって $\m{S}_1, \m{S}_2, \m{S}_3$ は $\mathfrak{su}(2)$ の基底である.

$\mathfrak{su}(2)$ の標準的な基底 $$ \begin{align} \m{S}_1 &= \bmat 0 & i\\ i & 0\\ \emat, \, \m{S}_2 = \bmat 0 & -1\\ 1 & 0 \\ \emat, \, \m{S}_3 = \bmat i & 0 \\ 0 & -i\\ \emat \end{align} $$

$\mathfrak{su}(2)$ の随伴表現

$\mathfrak{su}(2)$ の構造を調査するため,その随伴表現を求めてみることにする.そのためにはこれらの基底の間の交換子積を計算すればよい.その準備として $\m{S}_i \m{S}_j$ ($i, j = 1, 2, 3$) の計算結果を列挙しておこう.
$$
\begin{align}
\m{S}_1^2 &= \m{S}_2^2 = \m{S}_3^2 = -\m{I}\\
\m{S}_1 \m{S}_2 &= - \m{S}_2 \m{S}_1 = \m{S}_3\\
\m{S}_2 \m{S}_3 &= - \m{S}_3 \m{S}_2 = \m{S}_1\\
\m{S}_3 \m{S}_1 &= - \m{S}_1 \m{S}_3 = \m{S}_2
\end{align}
$$

勘の良い人は,四元数の $\mathbf{i}, \mathbf{j}, \mathbf{k}$ の計算規則との類似に気づいたのではないかと思う.どうやら我々の「発見的」プロセスは正しい方向に進んでいるようだ.

$\m{S}_1, \m{S}_2, \m{S}_3$ の随伴表現を求めてみると,まず
$$
\begin{align}
\ad \m{S}_1 &= \bmat (\m{S}_1^2 - \m{S}_1^2)^\vee & (\m{S}_1 \m{S}_2 - \m{S}_2 \m{S}_1)^\vee & (\m{S}_1 \m{S}_3 - \m{S}_3 \m{S}_1)^\vee \emat\\
&= \bmat \v{0} & (2\m{S}_3)^\vee & (-2\m{S}_2)^\vee \emat\\
&= \bmat
0 & 0 & 0 \\
0 & 0 & -2 \\
0 & 2 & 0 \emat \\
&= 2 \m{J}_1
\end{align}
$$ となる.なお,このエントリでは $\cdot^\vee$ や $[\cdot]_\wed$ は常に基底を $\m{S}_1, \m{S}_2, \m{S}_3$ として計算する.

$\m{S}_2$ や $\m{S}_3$ についても同様に計算することで以下の関係が得られる.

$\mathfrak{su}(2)$ の基底の随伴表現 $$ \begin{align} \ad \m{S}_1 &= 2 \m{J}_1\\ \ad \m{S}_2 &= 2 \m{J}_2\\ \ad \m{S}_3 &= 2 \m{J}_3 \end{align} $$

この結果から逆算すると,$\mathfrak{su}(2)$ の基底として $\m{S}_1/2, \m{S}_2/2, \m{S}_3/2$ を取っておけば,それらの随伴表現が $\m{J}_1, \m{J}_2, \m{J}_3$ そのものになることもわかる.つまり $\mathfrak{su}(2)$ と $\mathfrak{so}(3)$ は同じ構造を持っていると言える.

じゃあ最初からそいつらを基底にしとけばいいじゃんという気分にもなるのだが,四元数との関係を見るためには基底を $\m{S}_1, \m{S}_2, \m{S}_3$ のままにしておく方がよい (という事情はさっき見た $\mathbf{i}, \mathbf{j}, \mathbf{k}$ との類似性から読み取れるだろう).

ともかく,我々は $\mathfrak{so}(3)$ と $\mathfrak{su}(2)$ が同じ構造を持っていることを,それゆえ $SO(3)$ と $SU(2)$ も,少なくとも単位元の近傍では同じ構造を持っていることを発見的に見出した.

$SU(2)$ の随伴表現

前節の結果を用いると,任意の回転行列を $\mathfrak{su}(2)$ の元から作り出すことができる.具体的には,単位ベクトル $(w_1, w_2, w_3)\trans$ を軸とする角度 $\theta$ の回転を表すような回転行列 $\exp(\theta \sum_i w_i \m{J}_i) $ が与えられたとき,それを
$$
\begin{align}
\exp(\theta \sum_i w_i \m{J}_i)
&= \exp(\frac{\theta}{2} \sum_i w_i (2 \m{J}_i))\\
&= \exp(\frac{\theta}{2} \sum_i w_i \ad \m{S}_i)\\
&= \exp(\ad \frac{\theta}{2} \sum_i w_i \m{S}_i)\\
&= \exp(\ad \frac{\theta}{2} [\v{w}]_\wed)
\end{align}
$$ のように表すことができる.(繰り返すが,$[\cdot]_\wed$ は ($\m{J}_i$ ではなく) $\m{S}_i$ によって展開した $\mathfrak{su}(2)$ の元である)

…が,これだけだと四元数とのつながりは見えてこない.せっかく $\mathfrak{su}(2)$ を導入したのに,そこから回転行列を作ってしまうなら結局元の話に戻るだけである.

そこで,前回のエントリーで出て来た随伴表現に関する可換図式を考える.
$$
\require{AMScd}
\begin{align}
\begin{CD}
SU(2) @>{\Ad}>> SO(3)\\
@A{\exp}AA @A{\exp}AA\\
\mathfrak{su}(2) @>{\ad}>> \mathfrak{so}(3)
\end{CD}
\end{align}
$$

さっきまで我々がたどってきたのは,左下の $\mathfrak{su}(2)$ から右下の $\mathfrak{so}(3)$ を経由して右上の $SO(3)$ に至る道であった.つまり,$\m{X} = \frac{\theta}{2} [\v{w}]_\wed \in \mathfrak{su}(2)$ に対して,$\ad \m{X} \in \mathfrak{so}(3)$ を考えてから,$\exp(\ad \m{X}) \in SO(3)$ を作った.

一方,我々は $\Ad(\exp \m{X}) = \exp (\ad \m{X})$ が成り立つことを知っている.つまり,代わりに左上の $SU(2)$ を経由することにして,$\exp \m{X} \in SU(2)$ を考えてから $\Ad(\exp \m{X}) \in SO(3)$ を作ったとしても同じ回転行列にたどりつく.

「回転行列を作ってしまうなら結局元の話に戻るだけだってさっき言ったばかりじゃねえか」とつっこみたくなるのを我慢して,$\Ad$ の定義を適用してみると
$$
\begin{align}
\left\{ \Ad(\exp \m{X}) \right\} \m{Y}^\vee &= \left\{ (\exp \m{X}) \m{Y} (\exp \m{X})\inv\right\}^\vee
\end{align}
$$ となる.ここで $\m{Y}^\vee$ は ($\mathfrak{su}(2)$ が 3 次元ベクトル空間だから) 3 要素のベクトルであって,左辺は「3 次元回転行列を 3 次元ベクトルに作用させたもの」である.この等式は,それが右辺の $\left\{ (\exp \m{X}) \m{Y} (\exp \m{X})\inv\right\}^\vee$ によって計算できると主張している.

つまり,回転行列を実際に作らなくても,右辺のような 2 次行列の積によって回転作用を表現できるわけである.これこそが四元数がやっていることである.

四元数の構成

以上を踏まえて四元数を構成してみよう.

前節で見たように,単位ベクトル $(w_1, w_2, w_3)\trans$ を軸とする角度 $\theta$ の回転を表す回転行列は $\Ad(\exp \m{X}) = \Ad(\exp(\frac{\theta}{2} [\v{w}]_\wed))$ と表せる.この $\Ad()$ の中身の部分を
$$
\begin{align}
\m{Q}(\theta, \v{w}) &= \exp(\frac{\theta}{2} [\v{w}]_\wed)
\end{align}
$$ と書くことにしよう.

回転行列 $\Ad \m{Q}(\theta, \v{w})$ を 3 次元ベクトル $\v{p}$ に適用したものは,$\Ad$ の定義から
$$
\begin{align}
\left\{\Ad \m{Q}(\theta, \v{w})\right\} \v{p}
&= \left\{ \m{Q}(\theta, \v{w}) \, [\v{p}]_\wed \, \m{Q}(\theta, \v{w})\inv \right\}^\vee\\
&= \left\{ \m{Q}(\theta, \v{w}) \, [\v{p}]_\wed \, \m{Q}(-\theta, \v{w}) \right\}^\vee\\
\end{align}
$$ に等しい.


本質的にはこれでほぼ完了なのだが,まだ見慣れない形なので,よく見る $\cos$ と $\sin$ を使った形式に書き換えよう.そのためには
$$
\begin{align}
{[\v{w}]_\wed}^2 &= (w_1 \m{S}_1 + w_2 \m{S}_2 + w_3 \m{S}_3)^2\\
&= w_1^2 \m{S}_1^2 + w_2^2 \m{S}_2^2 + w_3^2 \m{S}_3^2 + w_1w_2(\m{S}_1\m{S}_2 + \m{S}_2\m{S}_1) + w_2w_3(\m{S}_2\m{S}_3 + \m{S}_3\m{S}_2) + w_3w_1(\m{S}_3\m{S}_1 + \m{S}_1\m{S}_3)\\
&= - (w_1^2 + w_2^2 + w_3^2) \m{I}\\
&= -\m{I}
\end{align}
$$ であることを使う.つまり $[\v{w}]_\wed$ は 2 乗して $-\m{I}$ になる行列である.よってオイラーの公式において虚数単位 $i$ の代わりに使えることを思い出そう.これを使うと
$$
\begin{align}
\m{Q}(\theta, \v{w}) &= \m{I} \cos \frac{\theta}{2} + [\v{w}]_\wed \sin \frac{\theta}{2}\\
\m{Q}(-\theta, \v{w}) &= \m{I} \cos \frac{\theta}{2} - [\v{w}]_\wed \sin \frac{\theta}{2}
\end{align}
$$ と表せる.

特に,$[\cdot]_\wed$ を基底 $\m{S}_1, \m{S}_2, \m{S}_3$ を用いて陽に書くと
$$
\begin{align}
\m{Q}(\theta, \v{w}) &= \m{I} \cos \frac{\theta}{2} + (w_1 \m{S}_1 + w_2 \m{S}_2 + w_3 \m{S}_3) \sin \frac{\theta}{2}\\
\m{Q}(-\theta, \v{w}) &= \m{I} \cos \frac{\theta}{2} - (w_1 \m{S}_1 + w_2 \m{S}_2 + w_3 \m{S}_3) \sin \frac{\theta}{2}\\
[\v{p}]_\wed &= p_1 \m{S}_1 + p_2 \m{S}_2 + p_3 \m{S}_3
\end{align}
$$ である.これらをさっきの $\left\{ \m{Q}(\theta, \v{w}) \, [\v{p}]_\wed \, \m{Q}(-\theta, \v{w}) \right\}^\vee$ に代入して,$\m{S}_1, \m{S}_2, \m{S}_3$ をそれぞれ $\mathbf{i}, \mathbf{j}, \mathbf{k}$ に,$\m{I}$ を 1 に置き換えれば,よく知られた四元数による回転の表示が得られる.

$\vee$ 演算子が残っているのが邪魔に見えるかも知れないが,これは計算結果から $\mathbf{i}, \mathbf{j}, \mathbf{k}$ の係数を取り出して 3 次元ベクトルを構成することに相当するものなので,残っていて正しい.

結局のところ,回転を表す単位四元数は $SU(2)$ の元,ベクトルを表す純四元数は $\mathfrak{su}(2)$ の元がそれぞれ正体であった.この認識の上に立つと,冒頭で挙げたものも含めて四元数の演算規則や各種性質は自然に理解することができる.


次回のエントリへ

https://www.ttrinity.jp/product/5425328 クォータニオン by AnotherGeek
デザインTシャツ通販【Tシャツトリニティ】