見出し画像

クォータニオンの覚書【Unity】

僕がUnityでよく使う、クォータニオンの使い方の覚書。

クォータニオンの加算

現在のクォータニオン:Quaternion rotation
加算したいクォータニオン1つ目:Quaternion AdditionRot_0
加算したいクォータニオン2つ目:Quaternion AdditionRot_1
足した結果:Quaternion result

var result = AdditionRot_1 * AdditionRot_0 * rotation;

加算したい方が左に来るのがおもしろい

クォータニオンの差分

現在のクォータニオン:Quaternion rotation
前のフレームのクォータニオン:Quaternion _prevRotation
差分:Quaternion diffRoation

var diffRotation = Quaternion.Inverse(_prevRotation) * rotation;

クォータニオンから回転量と回転軸を求める

回転量と回転軸がほしいクォータニオン: Quaternion rotation
回転量:float angle
回転軸:V3 axis

rotation.ToAngleAxis(out var angle, out var axis);

回転量と回転軸からクォータニオンを求める

回転量:float angle
回転軸:V3 axis
結果:Quaternion result

var result = Quaternion.AngleAxis(angle, axis);

二つのクォータニオンの間の角を割合で求める

クォータニオン1つ目:Quaternion rotation_0
クォータニオン2つ目:Quaternion rotation_1
割合(0~1.0) :float blend
結果:Quaternion result

var result = Quaternion.Lerp(rotation_0, rotation_1, blend);

blendが0.5で丁度二つの角の真ん中になる。
blend=0はrotation_0になる。
blend=1はrotaiton_1になる。

クォータニオンの軸の入れ替え(ZupをYupにする等)

ZupからYupに変換する時は
(x, y, z ,w)を(x, -z, y, w)か(x, z, -y ,w)にする
X軸向きに逆回転させたいのであれば
(x, y, z ,w)を(-x, y, z ,w)で逆回転になる。

この記事が気に入ったらサポートをしてみませんか?