2014-04-19 91 views
2

我在使用双四元数的麻烦,我相信这是因为他们没有正确归。 A,B和A”是其中后者偶联双重四元数。当这样做: Q = A * B * A” 我理论上应该总是符合Q = B结束,如果A和B是正确的正常化。但在某些情况下,我不这样做,而且这完全搞乱了我的整个骨架层次结构。正确正火的双四元数

许多网页显示,双四元数的范数||常见问题|| = sqrt(QQ'),但这意味着取双数的平方根,我不知道该怎么做。所以现在我只是把整个事情分为真实部分的长度。

我一直在寻找身边好几天,但我仍然还没有找到如何使用双四元一个很好的代码示例。我觉得我很了解这个理论,但是我仍然无法完成它的工作。

回答

0

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

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

Q =双四元数。 R =实数部分,D =双部分。你看,对于单位双四元组来说,双重部分消失了。您只需要计算实部的大小。所以这个问题被简化为计算简单四元数的大小。 ( - R 4是4D向量R的部件R1)

现在只需划分R/|| ||ř

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

:和,因为它是用于复数进行所计算出的类似和D/|| R ||你有你的归一化Q.

0

我最近学习双四元组,刚刚遇到同样的问题,我会尝试给我的答案,纠正我,如果有什么是错的。

为了标准化一个双四元数,比如说Q = a + eb,我们可以用|| Q ||来分割它。我们需要计算Q的规范,这可以用下面的公式来完成,

norm of a dual quaternion

然后我们就可以通过

normalize a dual quaternion

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/的实现。它只是将一个四元数与一个浮点数分开。