任意軸まわりの3次元回転を計算する便利な方法としてよく出てくる四元数(クォータニオン)。単に計算するだけであれば、基本的な考え方と使い方や注意点を覚えてしまえばいい。
一方で、四元数を他のことに使ったりもっと突き詰めたいのなら、当然もっと深く考える必要がある。私も一応そのようなことをしたい人間のひとりである。私が四元数について考える際に意識していることをまとめる。
ポリシー
- 四元数を構成する4つの成分はなるべく一緒に扱う
- 安易に実部をゼロにして考えない
- 恣意的に実部/虚部を無視しない
- 複素数のときはどうだったかを思い返す
- 四元数は複素数の良い拡張になっているはず
- ある問題への道具にするなら適性を見極める
- 「ナイフで缶詰を開けられるからといって、ナイフは缶詰開けに適した道具という訳ではない」
- とはいえ実際のところ、試行錯誤してみないと適性は分からないとは思う
「四元数の性質」に関する疑問
四元数の説明を見ていると、よく次の性質を紹介している。
3次元ベクトルを実部がゼロの純虚四元数とみなせば、それらの積を計算した四元数の実部は内積(のマイナス)、虚部は外積に一致する
性質であることは間違いないが、四元数の本質に迫っているようには感じない。
- 計算結果は実部がゼロでなくなるため、それ以上は同じ議論ができない(3つ以上の積を考えられない)
- 複素数のときに「純虚数同士の積」を考えることはあまり無いので、何をしたいかよく分からない
- 「3次元回転の公式」では普通に実部にも値がある
この性質を真に受けてベクトルの式を四元数に書き換えたところで、実部や虚部を取り出す操作が必要になってかえって煩雑になってしまうだろう。四元数はそんなに「使いにくい数」なのだろうか?
(と思っていたものの、少なくとも3次元回転の計算はベクトルの式から書き換えていっても煩雑にならず綺麗に整理される。詳細は『クォータニオンを真に理解する qpq-1の導出』を参照。)
私と四元数の関わりの背景(昔話)
なぜ一般的な説明にこんなに反発するのか考えると、私と四元数の出会い方に起因しているのだと思う。
簡単に言ってしまえば、私が本当に興味あるのは3次元回転でも四元数でもなく、4次元ユークリッド空間の幾何学(の小中学生レベルの話)であるということ。たまたまそれらが結びついたことで四元数と付き合うことになった。
四元数との出会い
四元数との出会い自体は普通の人と同じだと思う。しかし、ひとつ重要な情報を偶然手に入れたことが四元数の魅力を変えた。
3次元回転の計算方法
大学の力学の講義で剛体回転を習った際に、オイラー角や回転行列について知った。それをプログラムで扱う方法を調べていたら、自然と「任意軸まわりの回転の計算」として四元数が出てきた。
p' = q p \bar{q}
魔法のような1式ではあったが、複素数で2次元回転が計算できるならその3次元版としてできてもおかしくはないと半分受け入れていた。ただ、複素数と違い「半分の角度を指定する」「両側から挟む」「片方は共役にする」といった複雑さがあるのは気になった。
不思議な性質
色々と調べていたら引っかかる情報があった。**「3次元座標を表す四元数には、実部にゼロ以外の値を入れてもよく、回転後に実部の値は保たれる」**というのである。(計算誤差の要因となるのでしないほうがいい、とも書かれていた)
1回目の掛け算で実部と虚部の値が混ざるのに、2回目の掛け算でまた分離される。料理で例えれば「生卵をボウル内でかき混ぜフライパン上でもかき混ぜたら、スクランブルエッグでなく目玉焼きができた」と言っているようなもので、その裏には深い理屈があるはずだと気になり続けた。実部がゼロのときのみ成り立つというのならそこまで気に留めなかったと思う。
(ちなみに最近、実部がゼロでなくてもいいという性質は簡単に証明できると知って愕然とした。 → EMANの物理学『四元数(クォータニオン)の性質』)
4次元空間との関わり
元々は全く無関係の話題で、時間も戻る。
第4の次元は何か
小学生の時に「長方形の面積=縦×横」→「直方体の体積=縦×横×高さ」と学んだあたりで3次元というものを何となく認識した。そして、SFの影響でその先が「4次元目は時間」と思い込んでいた。
その思い込みを解くきっかけとなった本があった:『算数でホラー(パラドックス事件簿)』2。物語のひとつで、「4次元目も長さ」である空間を利用した不思議を紹介していた。もし4次元空間に飛び出せると3次元空間では何が起きるかを、物語では次元を落とすことでわかりやすく解説していた。
正多胞体への興味~挫折
正多面体がきれいで好きだったのだが、その4次元版:正多胞体がいろいろあることを知った。そこでWikipediaを見てみた。
日本語版は簡素で、何となく3次元からの拡張になっていることがわかるレベルだった。しかしある時に英語版を見てみると、内容がとても充実していて、必ず**「4次元の回転(simple rotation)」のアニメーション**があった。静止した図でも理解が厳しいが、4次元の回転とはいったい何なのかを理解できないといけなそうだった。
日本語 | 英語 |
---|---|
正五胞体 | 5-cell |
正八胞体 | 8-cell |
正十六胞体 | 16-cell |
正二十四胞体 | 24-cell |
正百二十胞体 | 120-cell |
正六百胞体 | 600-cell |
幸いWikipedia英語版には "Rotations in 4-dimensional Euclidean space" (4次元ユークリッド空間における回転)というピンポイントな項目が存在するのだが、読んでも何を言っているのか理解できなかった。
Simple rotations
A simple rotation R about a rotation centre O leaves an entire plane A through O (axis-plane) fixed. Every plane B that is completely orthogonal to A intersects A in a certain point P. Each such point P is the centre of the 2D rotation induced by R in B. All these 2D rotations have the same rotation angle α.
Half-lines from O in the axis-plane A are not displaced; half-lines from O orthogonal to A are displaced through α; all other half-lines are displaced through an angle less than α.
翻訳(Google翻訳を基に微修正):
Simple rotations
回転中心Oについてのsimple rotation Rは、Oを通るある平面A(軸平面)全体を固定する。 Aと完全に直交する各平面Bは、ある点PにおいてAと交差する。このような各点Pは、B上でRによって引き起こされる2D回転の中心である。これらの2D回転はすべて同じ回転角αを有する。
軸平面A上のOからの半直線は変位しない。 Aに直交するOからの半直線はαだけ変位する。他の全ての半直線はα未満の角度で変位する。
実はこのページを読み進めると四元数が出てくるのだが、序盤で挫折してブラウザバックしたので当時気付くことは無かった。
4次元ルービックキューブ
正多胞体に関連して、ルービックキューブの4次元版である『Magic Cube 4D』というゲームを遊んだことがある3。色を揃える以前にどういう原理なのかも分かっていなかったが、動きを見ているうちに超立方体のイメージが少し持てた、気がする。
動画による理解の進展
『Dimensions』というコンテンツを見つけて、4次元空間の見方や色々な性質を知ることができた。某動画サイトで見たため、ふざけたり見当外れだったり阿鼻叫喚だったりのコメントが多かったが、中には図を正しく補足したコメントも微かにあって理解の手助けになった。公式サイトで各章の解説があることに気付いていればもっと楽だったのが悔やまれる。
1周見るだけではとても理解できなかったが、動画を一時停止してじっくり考えたり、自分でも絵を描いて考えたり、きれいな図を頭に焼き付けたりして、何度も見ることでだんだん慣れて少しずつ分かっていった(今でも全ては理解していないが)。特にHopf fibration(ホップ・ファイブレーション)の図は後々四元数の幾何学的理解に繋がることになった。
このコンテンツの第1章で紹介してから何度も登場している、「ステレオグラフ射影」という方法が4次元空間(の一部)を可視化するのに役立つ。私は大学で地球惑星科学分野にいて、地図投影法を自然と身に付けていたため、その辺は有利に働いた。
四元数との再会
Dimensionsの内容が分かるにつれて、挫折していた4次元回転のほうも少しずつ読み進められるようになった。そして遂に、「単位四元数の積で4次元のisoclinic rotationを表せる」こと、そして**「任意の4次元回転を単位四元数の対で表せる」**という内容に到達した。これは四元数による3次元回転を一般化したものなので、単位四元数の対に制限をつけていくとどうなるか説明できれば3次元回転の公式を理解できる。
結局、魔法のように感じていた3次元回転の公式は、4次元から幾何学的に見ると単純な2回の回転操作でしかなかった。料理の例えで「生卵をかき混ぜる」と言ったが、実際はかき混ぜてなどいなかったというオチ。
(もっとも、この公式が計算機科学で役立つと気付いた人はすごいと思う。)
最終的にここまでの理解をまとめて、Qiitaに『四元数を用いた三次元回転計算の幾何学的意味』という記事を投稿した。内容が思い切り4次元回転の説明になっているのはこうした経緯による。
個人的な現在の四元数の認識
4次元ユークリッド空間を扱うのに便利な数。複素数で2次元平面を扱えることの拡張となっていて非常にきれいだと感じている。四元数に関する面白い式があれば、4次元空間で幾何学的に意味を考えてみたいし、次元を落として複素数ではどうなっているのか関連も考えてみたい。(幾何学的理解にこだわるのは、数式の解釈が苦手ということや座標に縛られた考え方が嫌いという背景もある)
それ故に、「実部をゼロにする」「実部と虚部を分けて考える」といった3次元前提の操作は素直に飲み込めない。複素数(2次元平面)ではしていない操作なら、それを正当化するだけの理屈が欲しい。あるいは実部もまとめて扱うことで、四元数本来の能力が引き出せるかもしれないと期待している。
4次元空間への興味(憧れ?)は今でもあるので、もうしばらくは四元数も使っていくと思う。ただ、四元数で限界を感じたらその時は別の方法を考えなければいけない。