我有兴趣实现一个干净的解决方案,为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.结果应该是什么?
好吧,我不知道亚当的季节,但我知道这些是线性操作.因此,如果您有一个(旋转,平移)操作(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个.
这有用吗,还是我误解了这个问题?