Slide 73
Slide 73 text
第 5 章 Unity で板野サーカス -誘導ミサイルでクォータニオン⼊⾨- 5.3 オイラー⾓とクォータニオンとマトリックス
オイラー⾓
(x,y,z) のように書きます。x 軸,y 軸,z 軸それぞれの軸で x 度 y 度 z 度回転するというように表現
します。やっかいなことにオイラー⾓は (x,y,z) が同じ値であっても、回転させる軸の順番によって
結果が異なります。xyz,zyx,yxz... というようにさまざまなパターンがあります。
クォータニオン
(x,y,z,w) のように書きます。クォータニオンは複素数を拡張したものです。それぞれの値はオイ
ラー⾓のように簡単ではありません。ざっくりいうと、x,y,z は回転軸であり、w はその周りの回転
量です。
値の感覚をつかむために Quaternion.AngleAxis を使⽤して、数字の変化を確認します。Quater-
nion.AngleAxis は、回転軸とその軸周りの回転⾓度を指定してクォータニオンを⽣成する関数
です。
リスト 5.1: TestAngleAxis()
for (var f = 0; f <= 360; f += 90)
{
var q = Quaternion.AngleAxis(f, new Vector3(1, 0, 0));
Debug.LogFormat("{0} {1}", f, q);
}
リスト 5.2: TestAngleAxis の結果
0 (0.0, 0.0, 0.0, 1.0)
90 (0.7, 0.0, 0.0, 0.7)
180 (1.0, 0.0, 0.0, 0.0)
270 (0.7, 0.0, 0.0,-0.7)
360 (0.0, 0.0, 0.0,-1.0)
出⼒結果を⾒ると、
このクォータニオンは x と w が変化してます。回転⾓度が 0 のとき、
(0.0, 0.0,
0.0, 1.0) です。これは回転がない「単位クォータニオン」です。回転⾓度が 0 以外のときは、x 軸
周りの回転なので x に値が⼊っており y と z は 0 です。この x は、θ =回転⾓度とすると sin(θ /2)
です。w は cos(θ /2) です。クォータニオンの数値から回転を想像できればデバッグに役⽴ちます。
マトリックス
3DCG では 4 ⾏ 4 列 16 要素のマトリックスを使⽤します。回転と位置とスケールをまとめて表
現します。回転のみであれば 3 ⾏ 3 列で表現できます。アプリケーションが回転の計算にオイラー
67