3Dグラフィックのプログラミングをしていて、デバッガーで回転量の値を見たけどクオータニオンで表されていていったいどのような回転を表すのか全然わからない……と思ったので考えてみました。
クオータニオンで回転を表現する場合、各成分には次のような値が入っています。
axis = 回転軸
radian = 角度
q.x = axis.x * sin(radian / 2);
q.y = axis.y * sin(radian / 2);
q.z = axis.z * sin(radian / 2);
q.w = cos(radian / 2)
したがって、逆にaxis
,radian
を求めるように式を変形すれば良いのです。
q.w = cos(radian / 2)
の式からradian / 2 = acos(q.w)
というふうに変形できるので、これを残りの三つに代入するだけです。
axis.x = q.x / asin(acos(q.w));
axis.y = q.x / asin(acos(q.w));
axis.z = q.x / asin(acos(q.w));
radian = acos(q.w) * 2;
参考: http://qiita.com/kenjihiranabe/items/945232fbde58fab45681