四元数行为就像欧纳

我的四元数执行有什么问题?我认为他们仍然像万智牌一样拥有万向锁。四元数行为就像欧纳

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

回到顶部