はじめに
タイトルに書いておいていきなりこんなことを書くのもなんですが、Euler角は別の機会に取り上げる(ジンバルロックとかあまり考えたくないので… (´・ω・`))かもしれないことにして、この記事では四元数について思い出したことを書いていきます。
四元数とは?
とりあえず、説明。
数学的に厳密な説明ではないかもしれませんが、説明しよう
四元数とは簡単に言うと複素数を拡張した数体系であり、複素数では1個であった虚数単位が四元数では3個になっています。
一般に四元数
四元数の3個の虚数単位(1以外の基底元)を
って、ハミルトンが1843年に最初に考えた式そのままですが(汗)、とにかく成り立ちます。
それで、何に使えるの?
物体の姿勢をEuler角を使って表現すると、姿勢に対する角度が決まらない特異点が必ず存在しますが、四元数で姿勢を表すと、そのような問題を回避することができます。
そこで、人工衛星や宇宙探査機、さらには3次元CGにおける物体の運動などといった、どういう姿勢を取るかがわからなかったり、姿勢の変化が微小であるとは限らない物体の姿勢の表現や制御などに使えます。
取扱上の注意
四元数を扱う上で最も注意しなければならないのは、
「乗法に関する交換則が成立しない。」
ことでしょう。行列の演算みたいですね。
そこで、(
スポンサーリンク
(
また、
になったりします。さらに(
(
また、(
となるので、(
が、(
がそれぞれ得られるので、(
したがって、1以外の基底元
(
乗算の演算。
ここまでの説明で四元数の真髄を理解していただけたと思いますので、四元数どうしの乗算を計算してみます。
四元数
とおくと、
と計算できます。
…といっても、(
そこで、応用面も見越してもう少し見通しの良さそうな書き方ができないか考えてみます。
(
となります。内積や外積を用いて何とか表現できるので、少しわかりやすい式になったかと思います。(`・ω・´)
(
四元数を用いた三次元座標系の回転変換の表現
前項で何とか四元数の乗算ができたので、これを使って四元数を用いた三次元座標系の回転変換を行うことを考えます。
ここで突然ですが、単位ベクトル
ここで、ある四元数
少々計算が面倒ではありますが、(
(
となるので、実部の値(
(
ここで、
(
と変形できます。
ここで
を中心とし、 と が張る平面上にある円上の点に原点から向かうベクトルであること。- 1.のベクトルの終点は
を のまわりに だけ回転させた点であること。
よって、(10)式が三次元座標系における回転変換を表現していることを示すことができました。
まとめ
実はこの記事を書いている間に四元数については(プログラミング等も含めて)すでに詳しい記事がいくつかある(「参考文献」参照。)ことがわかったので、できるだけ別の視点というか、計算の詳細な過程を書いてみました。
この記事では
ご覧いただいた方のお役に立つかどうかはわかりませんが、参考にしていただけると幸いです。
この記事は以上ですが、Scalaで実装してみましたので、ついでに読んでいっていただけると幸いです(リンクはこちら)。