2013 / 07 / 12
四元数旋转公式证明
之前学习图形学的时候,绕任意轴旋转的旋转矩阵可以由四元数推导出来。我觉得很神奇,百思不得其解其背后的原理。直到找到一篇靠谱的文献,细细地研究了好几个晚上,才弄明白了。想通的那一刻,成就感真是满满的。所以,粗略地记下来吧。
四元数是一种高阶复数,它可以用来刻画空间中的旋转。四元数 表示为:
其中, , , 满足:
由于i,j,k的性质和笛卡尔坐标系三个轴叉乘的性质很像,所以可以将四元数写成一个向量和一个实数组合的形式:
可以推导出四元数的一些运算性质,包括:
四元数乘法
共轭四元数
四元数的平方模
四元数的逆
等等。四元数可以看做是向量和实数的一种更加一般的形式,向量可以视作为实部为0的四元数,而实数可以是作为虚部为0的四元数。上述四元数的运算性质也是实数或向量的运算性质的更一般的形式。
那么,四元数如何表示三维旋转呢?
假设有一个旋转,绕单位向量(x,y,z)表示的轴,旋转ϴ角度,可令四元数q为:
那么某个点P,写成四元数的形式((x,y,z),0),其旋转后的坐标P'为:
接下来我们来证明这一点。
首先,我们证明
其中s为实数。显然
此时,我们可以将q看做是单位矩阵,因为如果q不是单位矩阵,我们就可以乘以一个常数s将其化为单位矩阵。
然后,我们证明 和p的模长相等
下面将q视为单位四元数:
四元数q的标量:
那么:
最后,我们证明
如图所示,u为旋转轴,旋转角度为σ,向量v旋转到w处。旋转到σ/2处为k(图中未标出)。
下面也用相同的字母指代四元数,如u就表示向量u的四元数形式((ux,uy,uz),0)。
首先,令u方向上的单位向量为u(为了方便,命名不变,后面的u都是指旋转轴方向的单位四元数),那么根据q的定义,参见四元数乘法法则:
现在令
如果能证明w与v的夹角是σ,那么就说明w确实是v旋转σ得到的,整个命题就得证了。
注意v,k和w都是实部为0的单位四元数,表示单位向量,我们有:
所以
上面的式子拆分成实部和虚部,虚部表明w与-k的平面和k与-v的平面重合,实部表明w和-k之间的夹角与k和-v之间的夹角相等,都是π-σ/2。这就说明了w与v的夹角是σ,原命题就得证了。
参考文章:
(完)