寄る年波からのクォータニオン学習

千里の道も一歩から。というわけで、仕事の一環でもありますが、クォータニオンの学習中です。クォータニオンとは何か?と言う事を、復習として自分に言い聞かせるように説明してみます。

  • 三次元空間上における物体の姿勢を示す、座標変換行列に変わるものとして使用する。変換行列に対して、姿勢に関する制限(=ジンバルロック)が無く、クォータニオン同士で補間が容易である。
  • 1の大きさを持つ単位クォータニオンでは、ある姿勢からある姿勢に変わる回転のみを扱う(=3×3の姿勢行列)。並進も大きさの変化で表現することができる(が、単位クォータニオン+並進で扱ったほうが色々都合が良さそう)
  • 概念としては、c=x+yi(iは虚数単位)のような複素数の延長上にあり、虚数空間内でそれぞれ直行するi,j,kという虚数単位を導入し、q=w+xi+yj+zk=q(w,V)(Vはx,y,zのベクトル)のように表現する。q(w,x,y,z)と、4つのパラメータで表されるので四元数クォータニオン)と呼ばれる。
  • クォータニオン同士の掛け算は、A(a,U),B(b,V)とした場合、AB=(ab-U・V,aV+bU-U×V)となる。
  • x,y,z軸を中心としたθ[rad]分の回転を表したい場合、クォータニオンはq(cos(θ/2),sin(θ/2)Ve)(Veは回転方向を示す単位ベクトル)
  • あるベクトルVa(0,V)(クォータニオンとしてベクトルを表現すると、実部が0になる)をクォータニオンの軸に沿って回転させ、Vbにしたい時は、Vb=q・Va・q^-1のように掛ける。


こんな感じでCGプログラミングに使っていくと良いらしいです。後は、行列←→クォータニオンの相互変換や、クォータニオンの補間操作がワンポイント的に必要になりますね。力学シミュレーションプログラム上で、物体回転操作、回転速度/加速度表現には必須かもしれません。しかし、実部1次元+虚部3次元で、都合4次元の数といわれると、一瞬??、と来ます(^^;;