クォータニオンの実装で何が問題になりますか?私は彼らがまだジンバルロックとすべてを持つオイラーのように行動すると思う。クォータニオンはオイラーのように振る舞う
Quaternionf rotations = makeQuaternion(new Vector3f(1, 0, 0), angles.x);
rotations.mul(makeQuaternion(new Vector3f(0, 1, 0), angles.y));
rotations.mul(makeQuaternion(new Vector3f(0, 0, 1), angles.z));
Matrix4f matrix = new Matrix4f();
matrix.translate(position);
matrix.rotate(rotations);
matrix.scale(scale);
angles
にはオイラー角が含まれています。人々はいつも私はそれらをまったく使用すべきではないと私に言いますが、私は四元数の価値をどう変えるか分かりません。そして私はQuaternionf rotations
が正しいと思います。例えば。角度が0, 90, 0
の場合、クォータニオンは0.00, 0.707, 0.00, 0.707 (x,y,z,w)
を含みます。どちらが正しい?
だからどこに問題がありますか?私はこの主題について私が見つけたすべてのものを読んだが、明らかにまだそれを得ていない。
EDIT:
private static Quaternionf makeQuaternion(Vector3f n, float a) {
float w, x, y, z;
a = a/360 * (float) Math.PI * 2;
w = (float) Math.cos(a/2);
x = (float) (n.x * Math.sin(a/2));
y = (float) (n.y * Math.sin(a/2));
z = (float) (n.z * Math.sin(a/2));
Quaternionf quaternion = new Quaternionf(x, y, z, w);
return quaternion;
}
*「クォータニオンの実装には何が問題になりますか?あなたの*クォータニオンの実装を表示していないので、私たちは理解できません。 – luk2302
@ luk2302さて、それがそれの最も重要な部分だと思います。私はあなたに 'makeQuaternion'関数を与えることができますが、私が言ったように、正しい結果を与えると思います。 – Maineri
クォータニオンを正規化していますか? –