クォータニオン

ずっと以前から頭の片隅にあったクォータニオンを、最近になってようやく少し分かった気がしてきました。
§
自分の印象としては、クォータニオンはその定義からして一見とっつきにくいものの、予め複素平面の知識があれば、おそらく自然と理解できるのではないかということ。クォータニオン自体が複素数の拡張ということで、なぜ単位クォータニオンの積が回転を表すのかは、複素数の積が回転を表すのとよく似ています。例えば、加法定理。昔からとても記憶力の弱い私は、実はあの sin と cos が入り混じった式を未だに覚えられません。サイン、コサイン、コサイン、...あれ?どっちだっけ?*1。でも、ある時この加法定理がオイラーの公式から至極単純に導けてしまうこと知って、大変驚いたことは今でも記憶に残っています。複素数を仲立ちとして、指数関数と三角関数が相互に関係し合っていることを実感できた一瞬でした。
この辺りの詳しい解説は、吉田武さんの「オイラーの贈り物」がとても参考になるでしょう。本書は、オイラーの公式の理解を目的として、その証明に辿り着くまでに必要な数学的概念を一つ一つ丁寧に説明した珍しい構成の本で、今回クォータニオンを学ぶ際にも何度か読み返したりしました。学生時代は数学が苦手だったけど心のどこかで理解したいと思っている方に是非お勧めします。ただし、オイラーの公式に辿り着くまでが結構長いので、頭からじっくりと読み進めるのもいいですが、既に前提知識がある方は、途中の章をすっ飛ばしていきなり本題から読んでもいいと思います。

オイラーの贈物―人類の至宝eiπ=-1を学ぶ (ちくま学芸文庫)

オイラーの贈物―人類の至宝eiπ=-1を学ぶ (ちくま学芸文庫)

§
さて、せっかくクォータニオンでベクトルを回転する術を学んだので、早速OpenGLを使って仮想トラックボールを作ってみました。元ネタは、GLUTのサンプルプログラム trackball.c。実装方法はオリジナルと異なりますが、基本的なアイデアは同じです。操作方法は、ウィンドウ内でマウスをドラッグするとオブジェクトが回転するほか、さらにシフトキーを押しながらドラッグすると拡大・縮小することができます。興味のある方は参考にどうぞ。

http://homepage.mac.com/radio_nights/files/trackball.tar.gz

*1:ちなみに、教科書に書いてある公式をなかなか鵜呑みに出来ない性格だったので、学校の数学の成績はいつも悪かった...