はじめに
四元数という複素数を拡張したような数を紹介します。
複素数の知識があったほうが良いとは思いますが、まあ無くとも大丈夫なはずです。
四元数ははっきり言って応用範囲が狭く、3次元の回転(CGやロボットの姿勢)のみでしか応用されていないように思います。
ですので、本記事ではさらっと紹介するに留めます。
和と積
四元数の和と積は、以下のように定義されます。
四元数の和と積の定義
に対して、 は以下のように定義されます。
四元数の積は非可換です。注意してください。
ただし、虚部が の四元数との積は可換です。
[虚部が の四元数との積は可換であることの証明]
とします。
を計算します。
共役
共役四元数を定義します。
共役に関する性質
に対して、以下が成り立ちます。
[1の証明]
を計算します。
[2の証明]
を計算します。
[3の証明]
を計算します。
[4の証明]
を計算します。
絶対値
定義より、 が成り立ちます。絶対値に関する性質
に対して、以下が成り立ちます。
とします。
[1の証明]
を計算します。
[2の証明]
を示せば、 より、 が示せます。
また、 のとき、 を入れ替えると、 となるので、 が示せます。
よって、 を示します。
を計算します。
よって、 が示せました。
の計算に用いたプログラム(Sympy)
from sympy.algebras.quaternion import Quaternion from sympy import * init_printing() var('w_p,x_p,y_p,z_p,w_q,x_q,y_q,z_q') p = Quaternion(w_p,x_p,y_p,z_p) q = Quaternion(w_q,x_q,y_q,z_q) pq_nrm2 = expand((p * q).norm() ** 2) qp_nrm2 = expand((p.norm() ** 2) * (q.norm() ** 2)) display(pq_nrm2) display(qp_nrm2)
逆元
が の逆元であることを示します。を計算します。 を計算します。以上より、 が の逆元であることが示せました。
参考文献
3Dグラフィックスのための数学入門 p108-p114
ゲームプログラミングのための3Dグラフィック数学 p67-p68