5.5 四元数
最后一种方位表示可以用轴角表示的变种,实际上我们用他表示旋转的时候,也可以简化的从绕轴旋转的角度来看待这种表示法,这就是四元数,由爱尔兰数学家William Hamilton爵士与19世纪发明。并由Ken Shoemake在20世纪80年代引入计算机图形领域。四元数由四个数组成,并且没有万向锁的问题。并且在数学上面的连接操作非常简单。因此如果正确构造的话,它在旋转向量计算方面非常有效。
虽然任何一个四元数都可以用来表示旋转。但是我们主要使用的还是单位四元素。所谓的单位四元数即是w2+ v*v=1,其中w是向量分部,v是数量分部。使用单位四元数的理由有三个:一是使得旋转和转换计算更加有效率。二是减少了浮点数错误,因为正规化后,数字都在-1到1之间,浮点数在这个范围内的精度非常高。最后单位四元素和轴角表示天然的在形式上的统一。一个单位四元数,数量w可以看做一个旋转角度θ,更规范的说法是w=cos(θ/2),
v=sin(θ/2)r.比如我们想要绕z轴旋转90度,我们的轴向量是(0,0,1),旋转角度的一半是π/4(弧度),这个四元数各个分部就是 w=cos(π/4),x =y==0*sin(π/4)=0,z=1*sin(π/4)= sin(π/4).
四元数的加法和内积与向量的加法和内积一样。一个四元数乘以-1,结果与原四元数互为相反数。四元数的相反数表示旋转的方向相反,但是他并不是表示原四元数表示的旋转的逆,如果原四元数表示绕轴v旋转θ度角,相反数则表示绕轴-v旋转2π-θ度角。因此旋转的结果是一样的。四元数的长度用四个分量的平方和再开方来计算。正规化一个四元数用四元数除以他的长度来获取。
四元数的内积和向量一样,用每个分量的积然后求和。如果内积接近1,表示他们表示的旋转越接近。因为我们知道四元数的相反数表示相同的旋转,因此如果内积结果越接近-1,表示他们也是越接近相同的旋转。
四元数求逆非常简单,因为绕一个轴旋转2θ,他的逆可以看成绕这个轴旋转-2θ,因此单位四元数 (cos(θ),sin(θ)x,sin(θ)y,sin(θ)z) 的逆是(cos(-θ),sin(-θ)x,sin(-θ)y,sin(-θ)z) 也就是(cos(θ),-sin(θ)x,-sin(θ)y,-sin(θ)z) 因此四元数(w,x,y,z)的逆为(w,-x,-y,-z)。