四元数逆 Quaternion Inverse
如果四元数与其逆相乘,则会得到无旋转四元数,即 恒等四元数 ,要找到这个 逆 是什么,我们需要从四元数表示绕某个轴进行旋转入手,要取消这个旋转,我们可以取反转轴,也可以取反旋转
取反旋转意味着绕同样的转轴,但是转向相反的方向,而取反转轴则不言自明,一般来说,取反转轴是求四元数逆的惯例,但有一点需要注意,取反旋转轴来找到四元数的逆仅适用于单位四元数
取反旋转轴实际上会得到四元数的 共轭,记为
Quaternion Conjugate(Quaternion quat) {
return Quaternion(
quat.x * -1.0,
quat.y * -1.0,
quat.z * -1.0,
quat.w
);
}计算四元数的逆 需要将其 共轭 除以其 范数 (模长的平方)
Quaternion Inverse(Quaternion quat) {
float norm = quat.x * quat.x + quat.y * quat.y + quat.z * quat.z + quat.w * quat.w;
float recip = 1.0 / norm;
return Quaternion(
quat.x * -1.0 * recip,
quat.y * -1.0 * recip,
quat.z * -1.0 * recip,
quat.w * recip
);
}当四元数是单位长度时,共轭计算和求逆是等价的