transform inverse() const
{
const Quaternion rotation = rotation_.conjugate();
const Vector translation = -(rotation * translation_);
return transform(translation, rotation);
}
这段代码定义了一个inverse()
成员函数,用于计算一个变换(transform
)的逆。这个变换包含旋转(rotation
)和平移(translation
)两部分。
让我们逐行解析这段代码:
const Quaternion rotation = rotation_.conjugate();
这行代码计算了rotation_
的共轭。在四元数(Quaternion
)中,共轭是将四元数的虚部取反而实部保持不变。对于表示旋转的四元数,其共轭代表了反向的旋转。
2. const Vector translation = -(rotation * translation_);
这行代码首先计算rotation_
与translation_
的乘积,然后将结果取反。这是因为在原变换中,translation_
是在rotation_
之后应用的。所以,为了得到逆变换,我们需要首先应用反向的旋转(即rotation
),然后再应用相反的平移。
3. return transform(translation, rotation);
最后,使用上面计算得到的translation
和rotation
创建一个新的变换并返回。
总之,inverse()
函数计算了一个变换的逆,使得当你首先应用原变换然后再应用其逆变换时,结
果是一个没有变化的恒等变换。这在图形学、机器人学和物理模拟等领域中是非常有用的,因为有时你需要“撤销”一个变换或找到一个变换的反向操作。
rotation_与translation_的乘积换位置是不可以的。
在变换矩阵或者仿射变换中,旋转和平移的操作通常不是交换的。这意味着先应用旋转再应用平移与先应用平移再应用旋转通常会得到不同的结果。
在数学和计算机图形学中,变换通常是以特定的顺序进行的,特别是当涉及到3D变换时。例如,在3D图形中,通常先应用旋转,然后应用平移,以得到正确的变换效果。