用于高质量四元数的数学等效于矩阵变换

时间:2011-06-24 14:14:05

标签: math geometry 3d

我有兴趣实施一个干净的解决方案,为3D转换提供4x4矩阵的替代方案。四元数提供等效的旋转,但没有翻译。因此,除了Quaternion之外,还需要一个额外的平移向量(tx,ty,tz)。我一直看到它声明矩阵表示需要12个值,而基于四元数的表示只需要7个。

我不明白的是如何操纵翻译价值。

对于四元数的旋转,没问题。

对于矢量v,轴矢量x和角度a:

q = cos(a/2) + x sin(a/2)

旋转矢量:

v' = qvq^-1

对于多次旋转,您可以将变换应用于四元数,并且只有在进行了最终旋转时才必须将其应用于数据。这就是矩阵变换在3D图形系统中非常好的原因。

好的,现在如果翻译进入,我该怎么办?

给定的向量转换是:

T = (tx,ty,tz)
v' = qvq^-1 + T

如果我想对此应用旋转和平移操作,我将不得不修改T和q。结果应该是什么?

3 个答案:

答案 0 :(得分:7)

好吧,我不知道亚当的季节,但我知道这些是线性操作。因此,如果您有一个(旋转,平移)操作(q,T)和另一个(r,U),并按顺序应用它们,则总转换为:

r(qvq^-1 + T)r^-1 + U

从左边的parens中分配r:

(rqvq^-1 + rT)r^-1 + U

然后从右边分配r ^ -1:

rqvq^-1r^-1 + rTr^-1 + U

稍微重新安排:

= (rq)v((rq)^-1) + (rTr^-1 + U)

所以这个组合相当于(rq,rTr ^ -1 + U)的单个(旋转,平移)。如果你可以组成其中的2个,你可以组成其中的N个。

这有用吗,还是我误解了这个问题?

答案 1 :(得分:2)

除了Nemo的答案之外,如果你真的想要一个完全数学构造来表示旋转和翻译,你可以使用双四元数,虽然数学可能有点矫枉过正,但它们有一些不错的属性。基本上只有两个四元数(真实和双重部分)以特殊方式解释。好的方面是,通过在它们上定义的常规操作(乘法,共轭,qvq *,......),你可以用数学上干净的方式计算刚体变换,就像旋转的正常四元数一样。

Wikipedia article可能不具有描述性,但是Ladislav Kavan将它们用于skinning(它们真正发挥了它们优于矩阵的优势)并在his paper中给出了一个很好的解释。 / p>

答案 2 :(得分:1)

您需要注意四元数的一些问题:

  • 四元数逆可以更简单地计算你坚持使用单位四元数。单位四元数的逆是简单的共轭,这是很容易计算的。一般四元数的倒数需要四个乘法,一个平方根和一个除法:如果你需要速度,你不想做的事。

  • 通过四元数转换向量涉及多个乘法和加法,而不是通过矩阵进行转换。如果你需要多次进行相同的变换,你可能想要保持四元数和相应的变换矩阵,并根据手头的操作使用更快/更精确的。

  • 单位四元数是SO(3)组的双重覆盖。否定四元数的所有元素,您将获得相同的转换。

  • 左右四元数。有两种方法可以用四元数q转换向量v:qvq *和q * vq。这两种方案的区别仅在于非共轭四元数是在向量的左侧(左四元数)还是在右侧(右侧的四元数)。两种表示都是完全有效的。选择一个,但要注意,无论你选择哪一个,其他人都会使用另一个。这可以与其他一些包交换四元数有问题(但如果您知道这种歧义存在,则不会)。

  • 转换与轮换。转换与旋转的问题也出现在3x3矩阵中。 (我不是在谈论一些人使用的4x4数学歪曲。)假设你有一张白色方格纸和一张印有图形线的透明纸。将两者对齐,使图线重叠。现在旋转透明度。这种物理旋转可以用旋转矩阵或旋转四元数(或一系列其他表示形式)在数学上描述; SO(3)上有许多图表。)现在想象在白纸上某处有一个点。您可以根据白板的坐标系或透明度的坐标系读出该点的位置。从白板坐标到透明坐标的转换是转换(不是旋转)。转型与轮换是密切相关的概念;一个是另一个的转置(或共轭)。