正确地规范双四元数

时间:2014-04-19 20:08:13

标签: quaternions normalize

我遇到双四元数问题,我相信这是因为它们没有正确规范化。 A,B和A'是双重四元数,后者是共轭的。这样做时: Q = A * B * A' 理论上,如果A和B被正确归一化,我应该总是以Q = B结束。但在某些情况下,我没有,而且它完全弄乱了我的整个骨架层次结构。

许多页面显示双四元数的范数是|| Q || = sqrt(QQ'),但这意味着取双数的平方根,我不知道该怎么做。所以现在我只是按照实际部分的长度划分整个事物。

我一直在寻找好几天,但我还没有找到关于如何使用双四元数的好代码示例。我觉得我对这个理论很了解,但我仍然无法让它发挥作用。

3 个答案:

答案 0 :(得分:0)

不太难。对计算机图形感兴趣的只是单位双四元数,即|| Q || = 1.这导致:

QQ' = (R, D)(R*, D*) = (RR*, RD* + DR*) = (1, 0)

Q =双四元数。 R =实部,D =双部分。你看,对于单位双四元数,双重部分消失了。您只需要计算实部的幅度。因此,问题被简化为计算简单四元数的大小。这与计算复杂的数字类似:

||R|| = sqrt(r1^2+r2^2+r3^2+r4^2)

(r1-r4是4D向量R的组分)

现在只需将R / || R ||除和D / || R ||并且你有标准化的Q.

答案 1 :(得分:0)

我最近正在研究双重四元数,刚刚遇到同样的问题,我会尽力给出答案,如果出现任何问题,请纠正我。

为了对双四元数进行归一化,比如Q = a + eb,我们可以将它除以|| Q ||。我们需要计算Q的范数,这可以通过以下公式来完成,

norm of a dual quaternion

然后我们可以通过

计算归一化

normalize a dual quaternion

答案 2 :(得分:0)

来自glm源代码:

template <typename T, precision P>
GLM_FUNC_QUALIFIER tdualquat<T, P> normalize(tdualquat<T, P> const & q)
{
    return q / length(q.real);
}

我检查了operator/实施。它只是将四元数与浮点数分开。