四元数

四元数特点

    1、四元数数据量小,只有四个元素
    2、四元数可以利用向量叉乘来计算,省去了矩阵乘法计算
    3、他会一直保持向量的维度是4维

四元数组合

    [ w, (x, y, z) ]
    [ w, v ]

    w是实数, v是三个虚数的组合

    计算
        四元数的四个分量存储着轴角对 v(x, y, z), theta
        x = v.x * sin(theta/2)
        y = v.y * sin(theta/2)
        z = v.z * sin(theta/2)
        w = cos(theta/2)

四元数叉乘

    叉乘后还是四元数
    叉乘满足结合律,但不满足交换律.

    q1 = [v1, w1]
    q2 = [v2, w2]
    q1 x q2 = [(v1 * w2 + v2 * w1 + Cross<v1, v2>), (w1 * w2 - Dot<v1, v2>)]



        参照复数四则运算
        使我们的虚数部分变成负数:就是共轭
            q* = [w, (-x, -y, -z)]

        求模
            |p| = sqrt( a*a + b*b );
            |q| = sqrt( pow(cos(a/2), 2) + pow(sin(a/2), 2) )

        求逆
            q^-1 = q* / |q|

        如果我们使用单位四元数是单位四元数那么就可以得到 q^-1 = q*. 所以单位四元数的共轨等于他的逆

        将逆和向量叉乘得到我们四元数旋转后的新坐标点

    注意事项
        四元数也是线性的,千万不能同时旋转

四元数和点

    把一个标准3D点(x,y,z)扩展到四元数空间: P = [0, (x,y,z)]即可,一般情况下它不会是单位四元数

    设Q为旋转四元数Q=[cos(theta/2),nsin(theta/2)],n为单位向量,theta为旋转角度,那么P绕n旋转theta度就是:

    P` = Q * P * Q^-1

🔚