クォータニオンによる回転表現

クォータニオンによる回転表現

本記事は,以前はてなブログに掲載した記事『回転クォータニオンの “発見的” 導入』のリライト版です

Doc's log
回転クォータニオンの ”発見的” 導入 - Doc's log 本記事のリライト版を、本ブログの移行先のページに掲載しています docslog.tech はじめに クォータニオン 共軛(共役) 積 積の共軛 回転クォータニオン ベクトルへの作用...
目次

はじめに

\(3\) 次元回転の表現には,オイラー角,回転ベクトル,回転行列など様々な方法が知られています.本稿では,これらとは異なる新しい量 ──回転クォータニオン── を導入し,\(3\) 次元回転を簡潔に表現する方法を考えます

ただし,回転クォータニオンの導入を天下り的に与えるのではなく,回転の性質を考察することから自然に到達される形で,発見的に議論を進めることを目的とします

参考:Wikipedia「Quaternions and spatial rotation」 https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation

クォータニオン

\(3\) 次元空間における回転は,回転の大きさと回転軸の方向とを指定すれば一意に定まります.すなわち,回転の大きさを表すスカラー量と,回転軸の方向を表すベクトル量との組によって回転が特徴づけられます

そこで、新しい量としてスカラー \(s\) とベクトル \(\mathbf{v}\) とを組にした量を導入します:

\[q=(s,\mathbf{v})\]

この量は成分が \(4\) つあるため,クォータニオン(四元数)と呼ぶことにします.まず基本的性質として,クォータニオンは和および実数倍について閉じているものと仮定します

共軛(共役)

上の定義はスカラー \(s\) とベクトル \(\mathbf{v}\) とを前提としていますが,今後はクォータニオン \(q\) 自体を基本的対象として扱いたいと考えます.そのためには,逆に \(q\) からスカラー部分とベクトル部分を取り出す方法を定める必要があります

自然な方法として,ベクトル部分の符号を反転させた量を導入します:

\[q=(s,-\mathbf{v})\]

これをクォータニオンの共軛と呼びます.\(\overline{\overline{q}}=q\) が成立するので、\(q\) と \(\bar{q}\) とは互いに共軛であり,両者は完全に対等な関係にあります.この共軛同士の和と差をとれば

\[\begin{align}s=(q+\bar{q})/2,&&\mathbf{v}=(q-\bar{q})/2\end{align}\]

となり,クォータニオンをスカラー部分とベクトル部分とに分解できます.なお,\(0\) になる成分は省略し,\((s,0)=s\) のように表記しています

この定義から,スカラーは自己と共軛 \(\bar{s}=s\) であり,ベクトルは符号を反転したものと共軛 \(\bar{\mathbf{v}}=-\mathbf{v}\) であることが分かります.したがって,スカラーやベクトルはそれぞれ特殊なクォータニオンとして理解できます

回転を表現するためには,クォータニオンの積を定義する必要があります

スカラー同士の積はスカラーになり,スカラーとベクトルとの積はベクトルになることが自然に要求されます.では,ベクトル同士の積はどうでしょうか

改めて \(3\) 次元空間の回転を考えますと,回転軸に平行な成分は変化せず,垂直な成分のみが回転します.この分解にはベクトルの内積が必要であり,さらに回転の向きを表すためには外積が必要になります.すなわち,回転を記述する上で,ベクトル同士の積には内積と外積との \(2\) つが必要です.内積はスカラー,外積はベクトルを与えます

この考察を踏まえ,スカラーおよびベクトルの間のすべての積を足し合わせ,クォータニオン積を次のように 仮定義 します:

\[\begin{aligned}q_1q_2=(s_1s_2+\mathbf{v}_1\cdot\mathbf{v}_2, s_2\mathbf{v}_1+s_1\mathbf{v}_2+\mathbf{v}_1\times\mathbf{v}_2)\end{aligned}\]

さて,クォータニオン積を定義したら,まずは共軛同士の積をとってみたくなります

\[\begin{equation}q\bar{q}=(s,\mathbf{v})(s,-\mathbf{v})=s^2-|\mathbf{v}|^2\end{equation}\]

この結果はスカラーであり,積の順序を入れ替えても変わりません.また,\(q\) と \(\bar{q}\) とは対等な関係にあることから,このスカラー量を \(q\) および \(\bar{q}\) のノルムを与える量と見做したくなります.しかし,この量は負になり得るため,\(q\) のノルム自乗としては適切ではありません.そこで,ノルム自乗が常に非負となるように内積の符号を反転させ,これをクォータニオン積の 本定義 とします

\[\begin{aligned}q_1q_2=(s_1s_2-\mathbf{v}_1\cdot\mathbf{v}_2, s_2\mathbf{v}_1+s_1\mathbf{v}_2+\mathbf{v}_1\times\mathbf{v}_2)\end{aligned}\]

そして,共軛との積でノルムを定義します

\[|q|^2=q\bar{q}=\bar{q}q=s^2+|\mathbf{v}|^2\]

積の共軛

共軛との積を考えたところで,今度は積の共軛も見てみます

\[\begin{aligned}\overline{q_1q_2}&=(s_1s_2-\mathbf{v}_1\cdot\mathbf{v}_2,-s_2\mathbf{v}_1-s_1\mathbf{v}_2-\mathbf{v}_1\times\mathbf{v}_2)\\&=(s_2,-\mathbf{v}_2)(s_1,-\mathbf{v}_1)\\&=\bar{q}_2\bar{q}_1\end{aligned}\]

積の共軛は,共軛の逆順の積に相等しくなります

回転クォータニオン

\(3\) 次元回転の自由度は回転角 (\(1\) 自由度) と回転軸の方向 (\(2\) 自由度) の合計 \(3\) ですが、クォータニオンは \(4\) 成分を持つため冗長です。そこでクォータニオンをノルム \(1\) に限定します:

\[|q|=1\]

この条件を満たす単位クォータニオンは,回転を表現するために用いる場合,特に回転クォータニオンと呼びます.ここでは \(\hat{q}\) と表すことにします

単位条件 \(s^2+|\mathbf{v}|^2=1\) より,回転クォータニオンは

\[\begin{align}\hat{q}=(\cos\alpha,\mathbf{n}\sin\alpha),&&|\mathbf{n}|=1\end{align}\]

と書けます.この表式から,\(\alpha\) が回転の大きさ,\(\mathbf{n}\) が回転軸を表すように回転操作を定義したくなります

ベクトルへの作用

単純に \(\hat{q}\) を \(\mathbf{v}\) に作用させても回転にはなりません.なぜなら,

\[\overline{\hat{q}\mathbf{v}}=\bar{\mathbf{v}}\bar{\hat{q}}=-\mathbf{v}\bar{\hat{q}}\neq-{\hat{q}\mathbf{v}}\]

となり,結果がベクトルにならない(←共軛が自己の符号を反転したものになっていない)からです.そこで,結果がベクトルになるように共軛のペアで挟んでみます

\[\overline{\hat{q}\mathbf{v}\bar{\hat{q}}}=\hat{q}\bar{\mathbf{v}}\bar{\hat{q}}=-\hat{q}\mathbf{v}\bar{\hat{q}}\]

すると,この操作は次の通りノルムを保存しますので,回転の操作になっています

\[\begin{align}|\hat{q}\mathbf{v}\bar{\hat{q}}|^2&=(\hat{q}\mathbf{v}\bar{\hat{q}})\overline{(\hat{q}\mathbf{v}\bar{\hat{q}})}\\&=\hat{q}\mathbf{v}\bar{\hat{q}}\hat{q}\bar{\mathbf{v}}\bar{\hat{q}}\\&=\hat{q}|\mathbf{v}|^2\bar{\hat{q}}\\&=|\mathbf{v}|^2\hat{q}\bar{\hat{q}}\\&=|\mathbf{v}|^2\end{align}\]

成分計算

実際に成分計算してみます

\[\begin{align}\hat{q}\mathbf{v}\bar{\hat{q}}&=(\cos\alpha,\mathbf{n}\sin\alpha)\mathbf{v}(\cos\alpha,-\mathbf{n}\sin\alpha)\\&=(-\mathbf{n}\cdot\mathbf{v}\sin\alpha,\,\cos\alpha\,\mathbf{v}+\mathbf{n}\times\mathbf{v}\sin\alpha)\;(\cos\alpha,-\mathbf{n}\sin\alpha)\\&=\sin^2\alpha(\mathbf{n}\cdot\mathbf{v})\mathbf{n}+\cos^2\alpha\,\mathbf{v}+2\sin\alpha\cos\alpha\,\mathbf{n}\times\mathbf{v}\;-\sin^2\alpha(\mathbf{n}\times\mathbf{v})\times\mathbf{n}\end{align}\]

前節で確認した通りに,実際にスカラー部が \(0\) のベクトルになりました.続けて,最後の項に \(3\) 重積の式

\[\begin{aligned}(\mathbf{n}\times\mathbf{v})\times\mathbf{n}&=|\mathbf{n}|^2\mathbf{v}-(\mathbf{n}\cdot\mathbf{v})\mathbf{n}\\&=\mathbf{v}-(\mathbf{n}\cdot\mathbf{v})\,\mathbf{n}
\end{aligned}\]

を代入して変形を進めます

\[\begin{align}\hat{q}\mathbf{v}\bar{\hat{q}}&=2\sin^2\alpha(\mathbf{n}\cdot\mathbf{v})\mathbf{n}+(\cos^2\alpha-\sin^2\alpha)\mathbf{v}+2\sin\alpha\cos\alpha\,\mathbf{n}\times\mathbf{v}\\&=(1-\cos2\alpha)(\mathbf{n}\cdot\mathbf{v})\mathbf{n}+\cos2\alpha\,\mathbf{v}+\sin2\alpha\,
\mathbf{n}\times\mathbf{v}\end{align}\]

なんと,この式はロドリゲスの回転公式と一致し,ベクトル \(\mathbf{v}\) を軸 \(\mathbf{n}\) のまわりに角度 \(2\alpha\) だけ回転させる変換になっています.これで,所望の回転操作を定義できたことになります

参考: Wikipedia「Rodrigues’ rotation formula」 https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula

まとめ

回転軸方向を \(\mathbf{n}\),回転角を \(\vartheta\) とすると,回転クォータニオンは

\[\hat{q}=(\cos\vartheta/2,\mathbf{n}\sin\vartheta/2)\]

と表されます.このとき

\[\hat{q}\mathbf{v}\bar{\hat{q}}\]

によって,ベクトル \(\mathbf{v}\) を軸 \(\mathbf{n}\) のまわりに角度 \(\vartheta\) だけ回転させることができます

最後に

回転クォータニオンの定義式を見ると,回転角は半角 \(\vartheta/2\) の形で現れています.これは,回転操作が

\[\hat{q}\mathbf{v}\bar{\hat{q}}\]

のように,クォータニオンとその共軛によってベクトルを挟む形で定義されていることに由来します.実際,\(\hat{q}=(\cos\alpha,\mathbf{n}\sin\alpha)\) とおくと,この操作によって得られる回転角は \(2\alpha\) になります.すなわち,\(1\) つのクォータニオンは「半分の角度」を担い,左右からの作用によって回転角が加わる構造になっています.このため,回転角 \(\vartheta\) を表すには \(\alpha=\vartheta/2\) と書く必要があります

この半角構造の直接の帰結として,回転クォータニオンには次の性質が現れます.定義式で \(\vartheta\to\vartheta+2\pi\) と変換すると

\[\begin{aligned}(\cos\tfrac{\vartheta+2\pi}{2},\mathbf{n}\sin\tfrac{\vartheta+2\pi}{2})&=-(\cos\tfrac{\vartheta}{2},\mathbf{n}\sin\tfrac{\vartheta}{2})\\&=-\hat{q}\end{aligned}\]

となりますが,

\[(-\hat{q})\mathbf{v}(-\bar{\hat{q}})=\hat{q}\mathbf{v}\bar{\hat{q}}\]

が成り立つため,\(\hat{q}\) と \(-\hat{q}\) とは同じ回転を表します.つまり,単位クォータニオンによる回転表現では,互いに符号の異なる \(2\) つのクォータニオンが同一の回転に対応します

このような性質は回転ベクトルや回転行列には見られません.したがって,回転クォータニオンはこれらとは異なる空間の元であり,回転をより大きな空間の中で表現していることが分かります

この関係はリー群の言葉では次のように表現されます:「単位クォータニオン全体の集合は \(2\) 次元特殊ユニタリ群 \(SU(2)\) をなし,空間回転の群 \(SO(3)\) に対して \(SU(2)\to SO(3)\) という \(2\) 対 \(1\) の対応(\(2\) 重被覆)を与える」.すなわち,回転クォータニオンによる表現は,空間回転をより豊かな構造のもとで記述しているものと理解できます

参考:
Wikipedia「Special unitary group」https://en.wikipedia.org/wiki/Special_unitary_group
Wikipedia「Rotation group SO(3)」https://en.wikipedia.org/wiki/3D_rotation_group

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメント一覧 (2件)

コメントする

目次