✏️

回転行列SO(3)とSO(4),四元数との対応関係

に公開

1. はじめに

Lie群やSO(3)など、特に物理学分野で重要な数学理論や用語が、コンピュータビジョンやロボット制御など3次元座標変換を扱う工学分野でも認知され、平易に理解しやすい言葉で解説する書籍やブログ記事も増えました。しかし、3次元回転行列のなすLie群SO(3)と対応する四元数との関係、抽象化された証明を理解できたとしても、結果の計算式は直観的でなく非常に覚えにくくありませんか?

この記事の対象者は、「四元数と3次元回転行列SO(3)の関係式は知っているけれども、その導出理由を呑み込めていない、抽象的な説明をされても納得感がない、理由を知りたい」と考える、過去の私のような工学技術者です。

この記事では、SO(3)でなくSO(4)を先に説明し四元数と対応付けます。SO(4)はSO(3)より理解しやすい性質があるためです。その上で、SO(3)の元をSO(4)の元に対応させる計算式を具体的に示します。抽象的な定理に頼らず、行列計算に基づいて、SO(3)とSO(4)および四元数との対応関係を明確にします。これにより、四元数と3次元回転行列の変換式も覚えやすくなると思います。

2. SO(n)のおさらい

SO(n)は、n\times nの正方行列Rで、直交行列と言われる性質(R^\top R=I_n)と\det R=1を満たすものが行列積に関してなすLie群のことです。この記事では、SO(2), SO(3), SO(4)のみを取り上げます。

SO(2)の元は、回転角の変数\thetaの三角関数を用いて、もしくは関係x^2+y^2=1を満たす2変数x, yで表されます。

R=\begin{pmatrix}\cos\theta & -\sin\theta \cr \sin\theta & \cos\theta\end{pmatrix} =\begin{pmatrix}x & -y \cr y & x\end{pmatrix}

一般的にSO(n)の元Rは、歪対称性(A^\top=-A)を満たす)行列Aにより、指数関数を用いてR=e^Aと表されることが知られています。この記事では次の級数展開を用います。

R=e^A=\cosh A+\sinh A
\cosh A=\sum_{k=0}^\infty \frac{1}{(2k)!}A^{2k}=I_n+\frac{1}{2}A^2+\frac{1}{4!}A^4+\cdots
\sinh A=\sum_{k=0}^\infty \frac{1}{(2k+1)!}A^{2k+1}=A+\frac{1}{3!}A^3+\frac{1}{5!}A^5+\cdots

SO(2)では、\thetaを回転角度としA=\theta JJ=\begin{pmatrix}0&-1\\1&0\end{pmatrix})とおくと、J^2=-I_2であることから

\cosh(\theta J)=I_2-\frac{1}{2!}\theta^2I_2+\frac{1}{4!}\theta^4I_2+\cdots =I_2 \cos\theta
\sinh(\theta J) =\theta J-\frac{1}{3!}\theta^3J+\frac{1}{5!}\theta^5J+\cdots =J \sin\theta
R =I_2\cos{\theta}+J\sin{\theta}=\begin{pmatrix}\cos\theta & -\sin\theta \cr \sin\theta & \cos\theta\end{pmatrix}

確かに周知の結果が得られます。

2つの回転行列R_1=e^{\theta_1 J}, R_2=e^{\theta_2 J}があったとき、2つの回転の合成(R_2を左からかけて次にR_1をかける)は

R_1R_2=e^{(\theta_1+\theta_2)J}

です。さらに、順番を入れ替えても変わらない、R_2R_1=R_1R_2、すなわち行列積の演算が可換であることも分かります。しかし、3次元以上ではこれは成り立ちません。

3. SO(3)とその難しさ

行列指数関数による表示

3次元空間の回転行列も、回転角\thetaと歪対称行列[\omega]_\timesの用いて行列指数関数R=e^{\theta [\omega]_\times}で表すことができます。

R=e^{\theta [\omega]_\times} =\sum_{k=0}^\infty \frac{1}{k!}({\theta [\omega]_\times})^k

ここで[\omega]_\timesは、3次元ベクトル\omega=(\omega_x,\omega_y,\omega_z)^\topに対して定義された交代行列であり、

[\omega]_\times=\begin{pmatrix}0 & -\omega_z & \omega_y \cr \omega_z & 0 & -\omega_x\cr -\omega_y & \omega_x & 0\end{pmatrix}

[\omega]_\timesに任意の列ベクトルv=(v_x,v_y,v_y)^\topを右からかける、行ベクトルを右からかけた結果は、ベクトル外積になります。

[\omega]_\times v =\omega\times v
v^\top[\omega]_\times =([\omega]_\times^\top v)^\top=-(\omega\times v)^\top=(v\times\omega)^\top

さらに行列積に次の性質が成り立ちます。

[\omega_1]_\times[\omega_2]_\times=w_2w_1^\top-\omega_1\cdot\omega_2I_3

\omegaはノルムが正規化されているとします(||\omega||^2=\omega_x^2+\omega_y^2+\omega_z^2=1)。

SO(2)の場合と異なり[\omega]_\times^2=-I_3は成り立ちませんが、[\omega]_\times^3=-[\omega]_\timesから、

\cosh(\theta[\omega]_\times) =I_3+\sum_{k=1}^\infty \frac{1}{2k!}\theta^{2k}[\omega]_\times^{2k} =I_3+[\omega]_\times^2 (\cos\theta-1)
\sinh(\theta[\omega]_\times) =\sum_{k=0}^\infty \frac{1}{(2k+1)!}\theta^{2k+1}[\omega]_\times^{2k+1} =[\omega]_\times \sin\theta
R=e^{\theta[\omega]_\times}=I_3+[\omega]_\times^2 (\cos\theta-1) +[\omega]_\times \sin\theta

と計算できます。3次元回転Rをベクトル\omegaにかけるとR\omega=\omegaと不変であり、回転軸方向を表すベクトルであることなど分かります。自由度は3です。

2つの回転行列R_1=e^{\theta_1[\omega_1]_\times}, R_2=e^{\theta_2[\omega_2]_\times}があったとき、2つの回転の合成R_3=R_2R_1が、どのように指数関数R_3=e^{\theta_3[\omega_3]_\times}で表されるでしょうか?この計算は、\omega_1, \omega_2が平行であるという関係がない場合非常に大変です。2つの行列の積に交換関係がないためです。

四元数との対応

過去の研究があり、四元数(クオタニオン)パラメータを用いて回転行列を表わす方法が知られています。この表示を用いると、四元数の積で2つの回転を合成した行列を算出することができます。

四元数を\boldsymbol{p}, \boldsymbol{q} などボールド体で表します。四元数の積を\boldsymbol{p}\star\boldsymbol{q}で表します。四元数の基底を\boldsymbol{1}, \boldsymbol{i}, \boldsymbol{j}, \boldsymbol{k}とし、それらの積に次の関係が成り立つとします。

\boldsymbol{1}\star\boldsymbol{1}=\boldsymbol{1},\ \boldsymbol{i}\star\boldsymbol{i}=\boldsymbol{j}\star\boldsymbol{j}=\boldsymbol{k}\star\boldsymbol{k}=-\boldsymbol{1}
\boldsymbol{1}\star\boldsymbol{i}=\boldsymbol{i}\star\boldsymbol{1}=\boldsymbol{i},\ \boldsymbol{1}\star\boldsymbol{j}=\boldsymbol{j}\star\boldsymbol{1}= \boldsymbol{j}, \ \boldsymbol{1}\star\boldsymbol{k}=\boldsymbol{k}\star\boldsymbol{1}= \boldsymbol{k}
\boldsymbol{i}\star\boldsymbol{j}=+\boldsymbol{k},\ \boldsymbol{j}\star\boldsymbol{k}=+\boldsymbol{i},\ \boldsymbol{k}\star\boldsymbol{i}=+\boldsymbol{j}
\boldsymbol{j}\star\boldsymbol{i}=-\boldsymbol{k},\ \boldsymbol{k}\star\boldsymbol{j}=-\boldsymbol{i},\ \boldsymbol{i}\star\boldsymbol{k}=-\boldsymbol{j}

\boldsymbol{p}=p_w\boldsymbol{1}+p_x\boldsymbol{i}+p_y\boldsymbol{j}+p_z \boldsymbol{k}のとき、\boldsymbol{p}で4次の列ベクトルを表すこともできるとします。ボールド体でないpp_x, p_y, p_zを縦に並べた3次元ベクトルであるとします。

\boldsymbol{p}=\begin{pmatrix}p_w\cr p\end{pmatrix}=\begin{pmatrix}p_w\cr p_x\cr p_y\cr p_z\end{pmatrix}

また、\boldsymbol{p}=(p_w,p)^\topなどと簡略表記も使います。p_wと他のp=(p_x,p_y,p_z)^\topを区別して扱うと、計算をシンプルに記述できるためです。

四元数\boldsymbol{p}, \boldsymbol{q} の積は、次の4次行列と4次ベクトルの積で書くことができます。

\boldsymbol{p}\star\boldsymbol{q}= \begin{pmatrix}p_w&-p_x&-p_y&-p_z\cr p_x & p_w & -p_z & p_y\cr p_y &p_z & p_w & -p_x\cr p_z & -p_y & p_x & p_w\end{pmatrix} \begin{pmatrix}q_w\cr q_x\cr q_y\cr q_z\end{pmatrix}

SO(3)の元である3次回転行列は、正規化された四元数\boldsymbol{p} (||\boldsymbol{p}||=1)に対応させられることが知られています。これをR_3(\boldsymbol{p})と書くことにすると次式で表されます。

R_3(\boldsymbol{p})= I_3+2p_w[p]_\times+2[p]_\times^2

具体的には次式になります。

R_3(\boldsymbol{p})= I_3+ 2p_w\begin{pmatrix} 0 & -p_z & p_y\cr p_z & 0 & -p_x\cr -p_y & p_x & 0 \end{pmatrix} +2 \begin{pmatrix} -p_y^2-p_z^2 & p_xp_y & p_xp_z\cr p_yp_x & -p_z^2-p_x^2 & p_yp_z\cr p_zp_x & p_zp_y & -p_x^2-p_y^2 \end{pmatrix}

そして指数関数を用いた表示e^{\theta[\omega]_\times}との関係は、次式で与えられます。

\begin{pmatrix}p_w\cr p_x\cr p_y\cr p_z\end{pmatrix} =\begin{pmatrix}\cos(\theta/2)\cr \omega_x\sin(\theta/2)\cr \omega_y\sin(\theta/2)\cr \omega_z\sin(\theta/2)\end{pmatrix}

四元数を使うメリットは、三角関数の計算が発生しないことなどに加えて、2つの回転の合成を四元数の積で計算できることです。すると2つの回転行列の合成は、四元数の積に対応することが分かっています。証明は後で行います。

R_3(\boldsymbol{p})R_3(\boldsymbol{q})=R_3(\boldsymbol{p}\star\boldsymbol{q})

四元数を用いる方法は、指数関数の\thetaと回転軸ベクトルを表す方法に比べると、三角関数の計算が不要です。2つの回転の合成も容易に可能です。

何が難しかったか

私の業務経験で、SO(3)を四元数で扱ったことがあるのですが、この計算式の導出理由が分かりませんでした。なぜ角度が\thetaでなく\theta/2なのか、こんなにも掛け算をしないといけないのか。この計算式が直交性を満たすこと、回転の合成が四元数の積で求められることの計算確認を試みたこともありますが、相当に難しかったですし、理由が分からないと計算式をすぐ忘れてしまいます。

多くの教科書や記事では、交換子の代数[J_i,J_j]=i\epsilon_{ijk}J_kから、四元数で表せるSU(2)と同じ代数的な構造を持っているなどと説明しますが、具体的にSO(3)との関係を記載したものはあまり見つかりません。また、SU(2)の説明では、複素数やパウリ行列を用いますが、形式的で3次元空間における回転と直観的に結び付きにくいです。

本記事は、SO(3)と四元数との関係を具体的にイメージできるよう、4次元のSO(4)の部分群に対応づける変換式を示します。その準備としてSO(4)について説明します。

3. SO(4)の方が簡単に理解できる

四元数に対応する部分集合

四元数の積\boldsymbol{p}\star\boldsymbol{q}の定義で出てきた4\times 4行列を四元数\boldsymbol{p}に対応付ける関数を\phi(\boldsymbol{p})と書きましょう。

\boldsymbol{p}\star\boldsymbol{q}=\phi(\boldsymbol{p})\boldsymbol{q}
\phi(\boldsymbol{p})=\begin{pmatrix}p_w&-p_x&-p_y&-p_z\cr p_x & p_w & -p_z & p_y\cr p_y &p_z & p_w & -p_x\cr p_z & -p_y & p_x & p_w\end{pmatrix}

\boldsymbol{p}=(p_w,p)^\topのとき、\phi(\boldsymbol{p})=\phi(p_w,p)と表記できるとします。

計算過程を省略しますが、積の結果 の対応付けも4x4行列の積で表されます。

\phi(\boldsymbol{p}\star\boldsymbol{q})=\phi(\boldsymbol{p})\phi(\boldsymbol{q})

ここで、\phi(\boldsymbol{p})を構成する4つの縦ベクトルに着目し、内積を計算すると全ての異なる組で0となり、自身との内積が四元数の2乗ノルム\|\boldsymbol{p}\|^2=p_w^2+p_x^2+p_y^2+p_z^2に等しくなることが分かります。すなわち、

\phi(\boldsymbol{p})^\top \phi(\boldsymbol{p})=\|\boldsymbol{p}\|^2I_4

これより、\boldsymbol{p}が正規化された四元数であれば\phi(\boldsymbol{p})は直交行列であり、さらに\det \phi(\boldsymbol{p})=||\boldsymbol{p}||^4=1より、\phi(\boldsymbol{p})はSO(4)の元であることが分かります。この元のなす集合の自由度は3であり、SO(4)の部分群であることが分かります。

これは、SO(4)の全体をなしませんが、SO(3)ではできなかったパラメータ化方法で、SO(2)の元を2変数x, yR=\begin{pmatrix}x & -y \cr y & x\end{pmatrix}、ただしx^2+y^2=1、と表す方法に似ており、とてもシンプルです。

さて、行列\phi(\boldsymbol{p})の覚え方、次のように1:3に分離して解釈をするとよいです。

\phi(\boldsymbol{p}) =\phi(p_w,p) =\left( \begin{array}{c|ccc} p_w&-p_x&-p_y&-p_z\cr \hline p_x & p_w & -p_z & p_y\cr p_y &p_z & p_w & -p_x\cr p_z & -p_y & p_x & p_w \end{array} \right) =\begin{pmatrix}p_w & -p^\top \cr p & p_wI_3+[p]_\times\end{pmatrix}

ここでp_wが0のとき、\phi(0,{p})は歪対称行列であり、その2乗は単位行列比例になります。

\phi(0,{p})^2=\begin{pmatrix}0 & -p^\top \cr p & [p]_\times\end{pmatrix}^2 =\begin{pmatrix}-||p||^2 & 0_3^\top \cr 0_3 & -||p||^2I_3\end{pmatrix}^2 =-||p||^2 I_4

そこで、p=\theta\omegaとおいて(\thetaは回転角度に相当する実数、\omegaは正規化された3次ベクトル)、\theta\phi(0,\omega)に、行列指数関数を適用すると

e^{\theta\phi(0,\omega)}=I_4 \cos\theta+\phi(0,\omega)\sin\theta =\phi(\cos\theta, \omega\sin\theta)

SO(4)の部分群とはいえ、SO(3)よりも直観的で分かりやすい計算が可能です。回転角度\thetaも自然に三角関数の係数として現れます。

さらに、正規化四元数を\boldsymbol{q}=(q_w,q)^\top=(\cos\theta,\omega\sin\theta)^\topと定めると、

e^{\theta\phi(0,\omega)}=\phi(\boldsymbol{q})

となります。

なぜSO(3)に比べると関係を簡単にできるのか。それはSO(4)では、四元数の基底\boldsymbol{1}, \boldsymbol{i}, \boldsymbol{j}, \boldsymbol{k}と等価な関係を4次行列で表現できるためです。

\phi(\boldsymbol{p})= p_wI_4 +p_x\begin{pmatrix}0&-1&0&0\cr 1&0&0&0\cr 0&0&0&-1\cr 0&0&1&0 \end{pmatrix} +p_y\begin{pmatrix}0&0&-1&0\cr 0&0&0&1\cr 1&0&0&0\cr 0&-1&0&0 \end{pmatrix} +p_z\begin{pmatrix}0&0&0&-1\cr 0&0&-1&0\cr 0&1&0&0\cr 1&0&0&0 \end{pmatrix}

SO(3)では、このような関係を満たす行列を作れません。

共役な四元数に対応する部分群

SO(4)の自由度6に対して、正規化四元数の自由度は3しかありません。\phi(\boldsymbol{p})と同様に直交性を持ち、SO(4)全体を補完する、3自由度のSO(4)の部分集合は他にないでしょうか。そこで、次の行列関数\widehat\phi(\boldsymbol{p})を導入します。

\widehat\phi(\boldsymbol{p})=\left( \begin{array}{c|ccc} p_w&-p_x&-p_y&-p_z\cr \hline p_x & p_w & p_z & -p_y\cr p_y &-p_z & p_w & p_x\cr p_z & p_y & -p_x & p_w \end{array} \right) =\begin{pmatrix}p_w & -p^\top \cr p & p_wI_3-[p]_\times\end{pmatrix}

\phi(\boldsymbol{p})との違いは [p]_{\times} の符号です。 これは回転の右手系と左手系の違いに対応するものです。このため行列積については、少し違った関係が成立します。

\widehat\phi(\bar{\boldsymbol{p}})\widehat\phi(\bar{\boldsymbol{q}})=\widehat\phi(\overline{\boldsymbol{p}\star{\boldsymbol{q}}})

ここで、記号\overline{\ \cdot\ }は、\boldsymbol{p}=p_w\boldsymbol{1}+p_x\boldsymbol{i}+p_y\boldsymbol{j}+p_z \boldsymbol{k} の共役(conjugate) \bar{\boldsymbol{p}}=p_w\boldsymbol{1}-p_x\boldsymbol{i}-p_y\boldsymbol{j}-p_z \boldsymbol{k}を与えるものとします。

積以外については、行列関数\widehat\phi(\boldsymbol{p})についても、\phi(\boldsymbol{p})と同様の性質が成り立ちます。

\widehat\phi(\boldsymbol{p})^\top \widehat\phi(\boldsymbol{p})=\|\boldsymbol{p}\|^2I_4

\boldsymbol{p}が正規化四元数のとき、\widehat\phi(\boldsymbol{p})はSO(4)の元である。

\widehat\phi(0,{p})^2=-||p||^2 I_4

p=\theta\omega\thetaは回転角度に相当する実数、\omegaは正規化された3次ベクトル)のとき

e^{\theta\widehat\phi(0,\omega)}=I_4 \cos\theta+\widehat\phi(0,\omega)\sin\theta =\widehat\phi(\cos\theta, \omega\sin\theta)

正規化四元数を\boldsymbol{q}=(q_w,q)^\top=(\cos\theta,\omega\sin\theta)^\topと定めると、

e^{\theta\phi(0,\omega)}=\phi(\boldsymbol{q})

となります。

なお、\widehat\phi(\boldsymbol{p})は次のようにも書けます。

\widehat\phi(\boldsymbol{p})=p_wI_4 +p_x\begin{pmatrix}0&-1&0&0\cr 1&0&0&0\cr 0&0&0&1\cr 0&0&-1&0 \end{pmatrix} +p_y\begin{pmatrix}0&0&-1&0\cr 0&0&0&-1\cr 1&0&0&0\cr 0&1&0&0 \end{pmatrix} +p_z\begin{pmatrix}0&0&0&-1\cr 0&0&1&0\cr 0&-1&0&0\cr 1&0&0&0 \end{pmatrix}

可換性

とても重要な関係を示します。それは、任意の\phi(\boldsymbol{p})\hat\phi(\boldsymbol{q})が行列積に関して可換であるということです。

\phi(\boldsymbol{p})\hat\phi(\boldsymbol{q})=\hat\phi(\boldsymbol{q})\phi(\boldsymbol{p})

証明

  • p_wおよびq_wに比例する係数は単位行列のため、可換である。このため、p_w=q_w=0の場合のみ示せばよい。
  • 左辺を計算すると
\phi(\boldsymbol{p})\hat\phi(\boldsymbol{q}) =\begin{pmatrix}0 & -p^\top \cr p & [p]_\times\end{pmatrix} \begin{pmatrix}0 & -q^\top \cr q & -[q]_\times\end{pmatrix} =\begin{pmatrix} -p\cdot q & (p\times q)^\top \cr p\times q & -pq^\top-qp^\top +(p\cdot q)I_3\end{pmatrix}
  • 右辺を計算すると

    \hat\phi(\boldsymbol{q})\phi(\boldsymbol{p})= \begin{pmatrix}0 & -q^\top \cr q & -[q]_\times\end{pmatrix} \begin{pmatrix}0 & -p^\top \cr p & [p]_\times\end{pmatrix} =\begin{pmatrix} -q\cdot p & -(q\times p)^\top \cr -q\times p & -qp^\top-pq^\top +(q\cdot p)I_3\end{pmatrix}
  • 両者を比較するとp\cdot q=q\cdot pp\times q=-q\times pより両辺が等しいことを示せた。

なお、任意の\phi(\boldsymbol{p})\hat\phi(\boldsymbol{q})が可換であるが、任意の\phi(\boldsymbol{p})\phi(\boldsymbol{q})は非可換であるのが面白いところです。通常は3つの代数の生成元の交換関係を調べて、この性質を証明しますが、このように直接、行列積を計算を行うことで確認する方法を本記事は採用しました。

四元数とSO(4)の元との対応

準備が揃いましたのでSO(4)の元をどう表現できるかに進みます。結論としては、2つの正規化四元数(6自由度)とSO(4)の元を対応させられます。

SO(4)の元は、4次の歪対称行列Aを用いてe^Aと表せます。

A= \left( \begin{array}{c|ccc} 0&-u_x&-u_y&-u_z\cr \hline u_x & 0 & -v_z & v_y\cr u_y &v_z & 0 & -v_x\cr u_z & -v_y & v_x & 0 \end{array} \right)

このとき、6自由度の変数を取り直して、2種類の行列生成関数の和でAを表すことができます。ここで\theta, \hat\thetaは回転角度を示す変数、\omega, \hat\omegaは正規化された3次ベクトルとします。

A=\theta\phi(0, \omega) +\hat\theta \hat\phi(0,\hat\omega)

任意の\phi(\boldsymbol{p})\widehat\phi(\boldsymbol{q})が可換のため、e^Aは2つの指数関数の積になります。

e^A=e^{\theta \phi(0,\omega)+\hat\theta \hat\phi(0,\hat\omega)} =e^{\theta \phi(0,\omega)}e^{\hat\theta \hat\phi(0,\hat\omega)}

正規化四元数を\boldsymbol{p}=(p_w,p)^\top=(\cos\theta,\omega\sin\theta)^\top, \boldsymbol{q}=(q_w,q)^\top=(\cos\hat\theta,\hat\omega\sin\hat\theta)^\topで定めると

e^A=\phi(\boldsymbol{p})\hat\phi(\boldsymbol{q})

このように対応付けられた回転行列をR_4(\boldsymbol{p},\boldsymbol{q})と記載します。

R_4(\boldsymbol{p},\boldsymbol{q}) =\phi(\boldsymbol{p})\hat\phi(\boldsymbol{q})

R_4(\boldsymbol{p},\boldsymbol{q})はSO(4)の元であり、SO(4)の全ての元を2つの正規化四元数で表すことができます。

回転行列の合成についても可換性を適用できるため、次の法則が成り立ちます。

R_4(\boldsymbol{p},\overline{\boldsymbol{q}})R_4(\boldsymbol{r},\overline{\boldsymbol{s}}) =R_4(\boldsymbol{p\star r},\overline{{{\boldsymbol{q}}\star{\boldsymbol{s}}}})

SO(4)は2つの正規化四元数と1対1の対応か関係があり、また可換性のため、計算がシンプルになることが分かります。

4. SO(3)をSO(4)の部分集合とみなす

SO(4)からSO(3)への対応付け

2つの正規化四元数をSO(4)の元に対応付ける関数R_4(\boldsymbol{p},\boldsymbol{q})に対して\boldsymbol{q}=\overline{\boldsymbol{p}}となるよう自由度を制限します。

具体的に計算を進めると

R_4(\boldsymbol{p},\overline{\boldsymbol{p}}) =\begin{pmatrix}p_w & -p^\top \cr p & p_wI_3+[p]_\times\end{pmatrix} \begin{pmatrix}p_w & p^\top \cr -p & p_wI_3+[p]_\times\end{pmatrix} =\begin{pmatrix}p_w^2+||p||^2 & p^\top [p]_\times\cr[p]_\times p & pp^\top+ \left(p_wI_3+[p]_\times\right)^2\end{pmatrix}

[p]_\times p=p\times p=0_3[p]^2_\times = pp^\top-||p||^2 I_3と、p_w^2+||p||^2=||\boldsymbol{p}||^2=1を適用し

R_4(\boldsymbol{p},\overline{\boldsymbol{p}}) =\begin{pmatrix}1& 0_3 ^\top\cr 0_3 & I_3+2p_w [p]_\times +2[p]_\times^2\end{pmatrix}

が得られる。R_4(\boldsymbol{p},\overline{\boldsymbol{p}})は回転行列であるため、I_3+2p_w [p]_\times +2[p]_\times^2も3次の回転行列でなければならない。これが正規化四元数 \boldsymbol{p} からSO(3)の元を対応づける計算式です。

R_3(\boldsymbol{p}) =\begin{pmatrix} 0_3 & I_3\end{pmatrix} R_4(\boldsymbol{p},\overline{\boldsymbol{p}}) \begin{pmatrix}0_3^\top \cr I_3\end{pmatrix} =I_3+2p_w [p]_\times +2[p]_\times^2

なお、4次元の空間で回転を2回を行うため、回転角度\theta、回転軸を示す正規化3次ベクトル\omegaに対し、\boldsymbol{p}=(\cos(\theta/2),\omega\sin(\theta/2))^\topと半分の角度で定める必要があります。また、R_3(\boldsymbol{p})=R_3(-\boldsymbol{p})であり、符号が反転しても同じ元に対応するため、2対1対応になります。

回転の合成規則の証明

これも容易に証明できます。SO(4)の回転行列の積

R_4(\boldsymbol{p},\bar{\boldsymbol{p}}) R_4(\boldsymbol{q},\bar{\boldsymbol{q}}) =\begin{pmatrix}1 & 0_3 ^\top \cr 0_3 & R_3(\boldsymbol{p}) \end{pmatrix} \begin{pmatrix}1 & 0_3 ^\top \cr 0_3 & R_3(\boldsymbol{q}) \end{pmatrix} =\begin{pmatrix}1 & 0_3 ^\top \cr 0_3 & R_3(\boldsymbol{p})R_3(\boldsymbol{q}) \end{pmatrix}

と、SO(4)の回転合成則

R_4(\boldsymbol{p},\bar{\boldsymbol{p}}) R_4(\boldsymbol{q},\bar{\boldsymbol{q}}) =R_4(\boldsymbol{p\star q},\overline{\boldsymbol{p\star q}}) =\begin{pmatrix}1 & 0_3 ^\top \cr 0_3 & R_3(\boldsymbol{p\star q}) \end{pmatrix}

の両者が等しいため、

R_3(\boldsymbol{p})R_3(\boldsymbol{q})=R_3(\boldsymbol{p\star q})

が成り立ちます。

5. おわりに

まとめ

  • SO(4)について調べると、SO(3)よりも理解しやすい。
    • SO(4)は6自由度あるが、3自由度の左手系と右手系の回転行列2つの積で表すことができ可換である。。
    • 上記3自由度の回転行列は、それぞれ独立な正規化四元数に対応する。
  • SO(3)は、SO(4)の自由度を制限したものとみなすと、四元数との対応関係、計算式が得られる。
    • 回転角度半分の行列積2回のため、SO(4)よりもややこしい計算式が出てくる。2対1対応になる。

SO(3)では読み取りにくい四元数との対応が、SO(4)で考えると直観的に分かるとは、自分にとって目から鱗であったため、この記事を書きました。SO(4)は、場の量子論(相対性理論と量子力学を融合)で使われるローレンツ群SO(1,3)にも関連し、重要です。

SO(4)の元が{左手,右手}系回転を表す2つの行列積で表せることは、1700年代にオイラーさんが発見されたとのことです[3]。SO(3), SO(4), SO(1,3)で検索すると賢い人たちの説明資料が沢山が出てきます。先人の研究と最近の資料公開に感謝します。今後も小さな再発見/再解釈を記事にしていければと思います。

この記事は、独学の表記や説明を使っていること点にご注意ください。この記事を理解していただいた後に、一般的な流儀で書かれた論文、教材、ブログ記事を読まれることをお勧めします。内容の誤り指摘も歓迎です。

参考資料

Discussion