如何获得对角四元数

时间:2014-05-25 22:16:14

标签: quaternions

我正在计算2个四元数之间的四元数旋转。

我知道Q1 = r x Q2,所以我认为r = Q1 x Q2 * (星号表示共轭)

然而,这似乎让我与我需要的角度相反。

离。如果Q1和Q2是Pi / 2关闭,我将得到-Pi / 2的四元数。我怎样才能得到我需要的正确角度?

实施例: 我正向前看45度。我正在推动世界前进。相对于外观,我向右行驶45度。在这种情况下,我需要r正好旋转45度。

提前谢谢

1 个答案:

答案 0 :(得分:2)

对我来说,问题的描述并不十分清楚。我认为最好得出你找到的公式。希望这可以让您理解(并可视化)您可能获得结果的原因。

给定两个四元数Q1和Q2,相对四元数旋转从Q1到Q2

Quaternion = relativeRotation = Q1^(-1) * Q2

其中Q1^(-1)表示Q1的倒数。您可以将此视为应用Q1到Q2的相反旋转。结果将是两者之间的相对旋转。四元数的倒数可以通过以下公式计算:

Q^(-1) = (Q*) / ||Q||^2

Q*表示Q的共轭。我假设您已经知道如何找到四元数的共轭。现在,如果Q单位四元数,那么Q范数的范数和平方都是1.0。因此,我们有:

Q^(-1) = Q*

这简化了我们的公式:

Quaternion relativeRotation = (Q1*) * Q2

请注意,只有单位四元数表示旋转。但是,由于两个单位四元数的Hamilton积本身就是一个单位四元数,我们不需要对结果进行归一化。

现在,从这个相对四元数,你可以确定角度(以弧度表示):

float angle = 2.0f * acos(relativeRotation.w)

这里,w是四元数的标量分量,acos是反余弦三角函数。该角度约为轴:

Vector3 axis = (relativeRotation.x, relativeRotation.y, relativeRotation.z)

现在,找到了角度和轴,您应该能够看到旋转。

最后,作为附注,汉密尔顿产品(*)不是可交换的。这意味着(Q1*) * Q2不一定等于Q2 * (Q1*)。按照与上述相同的推导,从Q2到Q1的相对单位四元数旋转可以通过以下公式计算:

relativeRotation = (Q2*) * Q1