在四元数与四元数相乘中,Eigen::Quaterniond A,B A*B和B*A的区别是什么?
Eigen::Quaterniond
是表示四元数的类,四元数的乘法是 非交换 的,也就是说,A * B
和 B * A
结果通常不同。
区别:
A * B
: 这是先应用四元数B
旋转,然后应用四元数A
旋转,意味着A
对B
施加旋转作用。B * A
: 这是先应用四元数A
旋转,然后应用四元数B
旋转,意味着B
对A
施加旋转作用。
物理意义:
四元数旋转的乘法顺序会影响最终的旋转方向,通常在几何变换中:
A * B
代表的是先执行B
的旋转,再执行A
的旋转,按顺序执行。B * A
代表的是先执行A
的旋转,再执行B
的旋转。
假设四元数 A
代表绕某个轴的旋转,而四元数 B
代表绕另一个轴的旋转。如果顺序不同,最终的旋转方向会不同。即使 A
和 B
是相同的旋转操作,换乘顺序会改变结果。
Eigen::Quaterniond数据结构
Eigen::Quaterniond
类使用以下数据结构来存储四元数:
- 标量部分(Real part):表示四元数的实部,通常记为 w。
- 向量部分(Imaginary part):表示四元数的虚部,通常记为 x,y,z,它们构成一个三维向量。
内部数据存储是以一组浮动的数值来表示的,通常是一个 Eigen::Vector4d
,这表示四元数的4个分量:(w, x, y, z)
。
通过四元数可以对向量进行旋转。假设有一个旋转的四元数 q
,可以使用 q * vector
来旋转一个三维向量