四元数逆 Quaternion Inverse

整理四元数共轭、单位四元数逆和一般四元数逆的关系。

四元数逆 Quaternion Inverse

如果四元数与其逆相乘,则会得到无旋转四元数,即 恒等四元数 q=(0,0,0,1)q = (0,0,0,1),要找到这个 是什么,我们需要从四元数表示绕某个轴进行旋转入手,要取消这个旋转,我们可以取反转轴,也可以取反旋转

取反旋转意味着绕同样的转轴,但是转向相反的方向,而取反转轴则不言自明,一般来说,取反转轴是求四元数逆的惯例,但有一点需要注意,取反旋转轴来找到四元数的逆仅适用于单位四元数

取反旋转轴实际上会得到四元数的 共轭,记为 qq^\ast

Quaternion Conjugate(Quaternion quat) {
    return Quaternion(
        quat.x * -1.0,
        quat.y * -1.0,
        quat.z * -1.0,
        quat.w
    );
}

计算四元数的逆 q1q^{-1} 需要将其 共轭 除以其 范数 (模长的平方)

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
    );
}

当四元数是单位长度时,共轭计算和求逆是等价的

q=1q1=q\begin{align*} \|q\| &= 1 \\ q^{-1} &= q^\ast \end{align*}