四元数显然相当于旋转矩阵,但4x4矩阵不仅仅是旋转。它还可以进行翻译和缩放。
仿射变换的矩阵实际上可以用12个元素表示,因为最后一行是常量:
a b c d
e f g h
i j k l
0 0 0 1
x' = a*x + b*y + c*z + d
y' = e*x + f*y + g*z + h
z' = i*x + j*y + k*z + l
因此,完整变换需要9次乘法和9次加法。 对于三个仿射变换:旋转,缩放和平移我想知道基于四元数的系统是否具有竞争力。我看了一遍,没找到任何地方。
给定四元数p =(w,x,y,z) 对于旋转,q'= pqp'。我可以添加一个翻译向量:t =(tx,ty,tz)
q'= pqp'+ t
与12个矩阵相比,这只是7个元素,但操作稍微多一些。 但这仍然不支持扩展。有完整的等价物吗?
注意:如果唯一的答案是将旋转转换为矩阵,那么这不是一个真正的答案。问题是四元数系统是否可以在没有矩阵的情况下执行仿射变换。
如果存在等价,是否有人可以将我指向java或c ++类,以便我可以看到它是如何工作的?