目录

「旋转」的不同实现方法

对于euler angles,rotation matrices,quaternions的讨论

我们知道对于「旋转」的表示可以有不同的方法,不同的方法也有其局限性,

Quaternions

四元数,也称quaternions,通常记为H(因为Hamilton的原因)。

借用wikipedia上的话 “从明确地角度而言,四元数是复数的不可交换延伸。如把四元数的集合考虑成多维实数空间的话,四元数就代表着一个四维空间,相对于复数为二维空间。“

我们可以用四维向量来表示:

$$ q = <w,x,y,z>
q = w + xi + yi +zk
q = s + v $$ – w,x,y,z 是实数,v是一个三元向量(e.g. a 3D point),

– i,j,k complex numbers (“quaternion units”) with $ i^2 = j^2=k^2=ijk=-1 $

或许看了上面的式子可能还是一头雾水,到底什么各个参数代表些什么,看到这些参数脑子里也没有关于这个旋转的具体想象。这其实是很正常的,要是能在脑海里面具像化反而有些不太正常吧:) 不论如何,四元数其实是属于“空间法术”的“余孽”。点解咧?下面就通过观察四元数,更准确地说是观察四位单位超球面在三位的投影,来对它进行深入研究了解。

四元数之所以难以理解,是因为它是一个四维的表示。不过也不是没有办法,因为我们通常用单位四元数来表示旋转,所以我们只需要关注思维中的单位超球面(unit hypersphere),然后就可以较为轻松地获得它在三维的球极平面投影(stereographic projection)。

单位圆在一维空间投影

我们知道作为二维空间中的单位圆在一维的投影是一条无限延伸的直线,假设我们有建立平面坐标系,另x轴为实轴,y轴为虚轴,从 - i 这一点出发和圆上没一点的连线与x轴的交点即构成其投影。值得注意的是,这条与x轴重合的直线只是该二维空间中单位圆的其中一个投影,二维空间中其他点的投影是没有办法在这个一维空间中表示。

单位球在二维空间投影

类似的,对于单位球在二维空间的投影也可以类似地去看待,假设我们有i轴,j轴,两个虚数轴形成一个平面,实数轴与z轴重合。然后与前面投影相似的手法,我们可以用球极平面投影来描述三位的旋转,对于每一个单位球面上的点,我们都可以将其与 -1 相连,这条线与ij平面的交点即是二维的投影点,于是实数轴上的1会投影在平面的原点,北半球的点会投影在ij平面的单位圆内,而南半球的点会投影在单位圆之外,并且任意方向的无穷远处都会是-1的投影。旋转的时候,就是「线」逐渐围成「圆」,「圆」逐渐展开成「线」的过程。

单位超球面在三维空间投影

接下来就是我们关注的重点了,有了上面的铺垫,我们不难理解为什么四元数是由一个实数项与三个虚数项组成的了。

对四维空间中的单位球面进行球极平面投影,实数轴的1投影ijk坐标系的原点。当四维超球面投影到三维空间时,与三维空间交于位置不变的三维单位球面,而这个球面对应纯四元数,也就是实属部分为零。实属部分介于0到1之间的投影在了这个三位球的里面,而实数部分小于0的投影在了三位球面以外,-1投影在了各个方向的无穷远处。

正如同三维中的圆投影到二维平面中是一条线一样,四维中的球(不是超球)投影在三维是一个平面,事实上,三维投影中的平面都是四维超球中过 -1 的球面在三维的投影。1

四元数代数运算

我们有如下定义: $$ q_1 = s_1 + v_1 \quad q_1=<w_1,x_1,y_1,z_1> $$ $$ q_2 = s_2 + v_2 \quad q_2=<w_2,x_2,y_2,z_2> $$ $$ \Box Addition \quad q_1 + q_2 = <w_1+w_2,x_1+x_2,y_1+y_2,z_1+z_2> $$ $$ \Box Multiplication \quad q_1q_2=s_1s_2 - v_1v_2+s_1v_2+s_2v_1+v_1 \times v_2 $$

其中Multiplication可以用矩阵来表示: $$ \begin{vmatrix} w_1 & -x_1 & -y_1 & -z_1 \ x_1 & w_1 & -z_1 & y_1 \ y_1 & z_1 & w_1 & -x_1 \ z_1 & -y_1 & x_1 & w_1 \end{vmatrix}

\begin{vmatrix} w_2 \ x_2 \ y_2 \ z_2 \end{vmatrix} $$

我们也可以拓展一下我们的定义: $$ Norm: ||q|| = q = \sqrt{w^2 +x^2+y^2+z^2} $$ $$单位四元数:||q|| = q = 1 $$ $$纯四元数:w = 0 \quad q = <0,x,y,z> $$

下一步我们看看「旋转」的过程是如何进行的

假设我们需要围绕一个向量a旋转 $\theta$角,前面我们有讨论过这个过程如何用旋转矩阵实现,现在来看看四元数在面对这种问题时候的表现吧。


  1. 可视化理解四元数,愿你不再掉头发 ↩︎