四元数による回転を実装してみよう

スタート 最初の四元数は恒等四元数

最初、四元数はこういうものを用意しよう。

w x y z
1.0 0.0 0.0 0.0

マウスをクリックしてそれをどう反映させるか?

説1 適当な換算係数にする

M_PIは適当な換算係数 piにしておくと、画面いっぱい動かした時にちょうど一回転になる

 double radian = length * Math.PI;
float theta =  (float)(Math.sin(radian)) / length;

説2 きちんと投影する

ウィンドウ中心を0,ウィンドウ幅を2に調整したマウス位置をとる。
それを、球に投影させる。
投影させる式はこんなかんじ

(1)
\begin{align} z=\sqrt{2r^2-(x^2+y^2)} \end{align}

x,yはウィンドウ中心を0,ウィンドウ幅を2に調整したマウス位置。
rは球の半径=0.8
意味不明。

とりあえず、マウスが移動した距離を回転角に換算する。

クォータニオンを過去のクォータニオンに乗算する。

前のクォータニオンに現在のクォータニオンをかけてその結果を現在のクォータニオンに代入するというのが一般的のようだ。
これは何を意味しているかというと、
クォータニオンの乗算で、複数の回転を連結しているのだ。
クォータニオンで回転するためには、共役クォータニオンとで挟んであげなきゃいけないんでしょう?
なんでこれがまかり通るの?
これの理由についてはここ四元数の積の逆数は、順序を逆にした逆数の積と等しい。を見よ。

四元数を行列に変換する(ついでに、四元数は共役複素数とで挟んだことになる)

というのが私の解釈だ。

サポートサイト Wikidot.com