2018年5月27日日曜日

blenderでクォータニオンをなんとなく理解する

なんとなく理解しよう!

Blenderのインストール

…は省略。まだの人はこちら→https://www.blender.org/

下準備

キューブを消し、サルを置く

  • キューブを右クリックして選択
  • Xキーを押して消す
  • SHIFT+A → mesh → monky

視点を変更とか

  • テンキーの5と1を押す
  • Nキーを押して、右側に情報パネルを出す

あとはマウスのホイールを回して適宜ズームするといいです

初期値を確認

右側の情報パネルの、Transform → Rotationに注目。
デフォルトでは
XYZ Euler
になってると思います。
このときの数値は、X,Y,Zすべて0です。
次に
Quaternion(WXYZ)
に変更してみましょう
W=1で、X,Y,Zは0です。

角度を変えてみる

XYZ Eulerにして、Y軸を30度にしてみます。
その後Quaternion(WXYZ)にして数値を見ると

W=0.966、Y=0.259になってます。Wから少しだけYに数値が移った感じ

一度XYZ Eulerに戻して、Y軸の角度を60度にしてから同様にQuaternion(WXYZ)の数値を確認してみます
同様に90度も。

このようにして、サルのアタマが元の位置に戻るまで全ての値をチェックしてみます。
Euler x,y,z    Quaternion WXYZ
0,0,0            1.000, 0, 0.000, 0
0, 30,0          0.966, 0, 0.259, 0
0, 60,0          0.866, 0, 0.500, 0
0, 90,0          0.707, 0, 0.707, 0
0,180,0         0.000, 0, 1.000, 0
0,270,0        -0.707, 0, -0.707, 0

Quaternionから回転軸を知る

上で求めたQuaternionの数値を見るとWとYだけ数値が変わっていることが分かります。

X,Y,Zは回転軸のベクトルを表していて、
 X=0、Z=0、Y=なんか数字
であることから、Y軸まわりの回転をやっていることが分かります。
実際、EularでY軸まわりだけ回転させてますので、正しいです。

Quaternionから回転角度を知る

重要な式は

  • W=COS(θ/2)
  • X=nx SIN(θ/2)
  • Y=ny SIN(θ/2)
  • Z=nz SIN(θ/2)
  • W*W + X*X + Y*Y + Z*Z = 1

nx, ny, nzは回転軸の向きを表す単位ベクトルです。
今回のケースではY軸にしか回していないので
{nx, ny, nz} = {0,1,0}
となります。

なので
  • W=COS(θ/2)
  • Y= SIN(θ/2)
この2つの式から回転角θを知ることができます。

θ=ArcCOS(0.707)*2 = 90[deg]
θ=ArcSIN(0.707)*2  = 90[deg]

大きさが1を確かめる

30度のとき
{W,X,Y,Z} = {0.966, 0, 0.259, 0}
なので、
0.966 * 0.966 + 0.259*0.259 =0.933 + 0.067 = 1.000
他についても同様なので省略

覚えるの面倒だけど‥

最初のEuler x,y,z to Quaternion WXYZの表を拡張して、全てのパターンの表を書き出して表にします。
その表をなんとかして記憶!そうすればQuaternionからなんとなくオブジェクトがどっちに向いているか分かるはず!

まとめ

  • WXYZのうちXYZの数値から、なんとなく回転軸の向きを知る
  • W=COS(θ/2)をつかって、なんとなくどのくらい回転してるかを知る
  • 気合いれてWXYZの表を覚える。(ちなみに私は覚えられませんでした)
なんとなく分かりました?私はさっぱりです







0 件のコメント:

コメントを投稿