2013 / 07 / 12

四元数旋转公式证明

之前学习图形学的时候,绕任意轴旋转的旋转矩阵可以由四元数推导出来。我觉得很神奇,百思不得其解其背后的原理。直到找到一篇靠谱的文献,细细地研究了好几个晚上,才弄明白了。想通的那一刻,成就感真是满满的。所以,粗略地记下来吧。

四元数是一种高阶复数,它可以用来刻画空间中的旋转。四元数 表示为:

其中, 满足:

由于i,j,k的性质和笛卡尔坐标系三个轴叉乘的性质很像,所以可以将四元数写成一个向量和一个实数组合的形式:

可以推导出四元数的一些运算性质,包括:

四元数乘法

共轭四元数

四元数的平方模

四元数的逆

等等。四元数可以看做是向量和实数的一种更加一般的形式,向量可以视作为实部为0的四元数,而实数可以是作为虚部为0的四元数。上述四元数的运算性质也是实数或向量的运算性质的更一般的形式。

那么,四元数如何表示三维旋转呢?

假设有一个旋转,绕单位向量(x,y,z)表示的轴,旋转ϴ角度,可令四元数q为:

那么某个点P,写成四元数的形式((x,y,z),0),其旋转后的坐标P'为:

Misplaced &

接下来我们来证明这一点。

首先,我们证明

其中s为实数。显然

此时,我们可以将q看做是单位矩阵,因为如果q不是单位矩阵,我们就可以乘以一个常数s将其化为单位矩阵。

然后,我们证明qpq^{-1}和p的模长相等

下面将q视为单位四元数:

四元数q的标量:

那么:

最后,我们证明

Misplaced &

如图所示,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的夹角是σ,原命题就得证了。

参考文章:

(完)