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

Dov*_*Dov 4 math 3d geometry

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

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

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

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

q = cos(a/2) + x sin(a/2)
Run Code Online (Sandbox Code Playgroud)

要旋转矢量:

v' = qvq^-1
Run Code Online (Sandbox Code Playgroud)

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

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

给定的向量转换是:

T = (tx,ty,tz)
v' = qvq^-1 + T
Run Code Online (Sandbox Code Playgroud)

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

Nem*_*emo 7

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

r(qvq^-1 + T)r^-1 + U
Run Code Online (Sandbox Code Playgroud)

从左边的parens中分配r:

(rqvq^-1 + rT)r^-1 + U
Run Code Online (Sandbox Code Playgroud)

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

rqvq^-1r^-1 + rTr^-1 + U
Run Code Online (Sandbox Code Playgroud)

并稍微重新安排:

= (rq)v((rq)^-1) + (rTr^-1 + U)
Run Code Online (Sandbox Code Playgroud)

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

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