四元数行为就像欧纳
我的四元数执行有什么问题?我认为他们仍然像万智牌一样拥有万向锁。四元数行为就像欧纳
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)
。这是正确的吗?
那么问题在哪里?我已经阅读了我所发现的关于这个主题的所有内容,但我显然还是不明白。
编辑:
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;
}
回答:
四元显得很有欺骗性,这是非常,非常努力拿到了坚实的感觉他们。
首先,您可能已经阅读了一些资源。对于四元数的维基百科页面是方程一个很好的资源:https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation
我也对基础知识的博客帖子大约四元数,什么帮助我得到了他们的感觉: https://blog.mide.com/quaternions-for-orientation
有一个很少有东西在makeQuaternion中看起来很奇怪,而且不清楚你是不正确地使用东西还是只是在不同的地方应用东西。
您正在实施的公式为:
这里,A是旋转的总角度,也就是如果你没有围绕一个轴的总旋转你会应用旋转,并Bx,By,Bz是方向角度。方向角余弦的平方和必须是1(即cos^2 Bx + cos^2 By + cos^2 Bz = 1),因为它表示一个指向原点的向量。
您可以使用n.x,n.y,n.z,只要您确定平方和= 1,即它们需要是单位球体上的点,它就会起作用。 A和方向角之间有类似的关系,但最简单的验证方法是确保四元数的平方和等于1.
以上是 四元数行为就像欧纳 的全部内容, 来源链接: utcz.com/qa/257833.html