クォータニオンの覚書【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)で逆回転になる。
この記事が気に入ったらサポートをしてみませんか?