四元数与旋转变换

来源:互联网 发布:mac魔兽世界7.0插件 编辑:程序博客网 时间:2024/06/14 12:39
  1. 问题来源
    问题还是来源于课本内容,在图形学课本中讲到三维变换矩阵的时候引入了四元数,但是同样没有说明四元素是如何旋转三维空间里向量的原因。通过查找维基百科,这个问题完全可以理解。
    首先简单介绍四元数的表示形式:

    q=s+xi+yj+zk   s,x,y,zR

    其中i,j,k定义它们的计算规则是i2=j2=k2=ijk=1 以及:
    ij=k   jk=i   ki=j
    ji=k   kj=i   ik=j
    s是实部,i,j,k是虚数的单位,进行乘运算时又有类似向量叉积的特点,不可以交换计算顺序,关于四元数介绍和运算可以看这里。把这三个分量看成是三位空间向量的坐标,则两个纯四元数(实部s=0)uv之间的乘积可以用向量的运算来表示:uv=u×vuv(1.1)注意式子中,在讨论纯四元数的时候,对四元数和向量的表示并没有区分开来,后面也不加区分的使用这种表示。

  2. 四元数与万向节死锁的关系
    关于万向节死锁的有很多形象的例子和解释,例如[http://www.cnblogs.com/soroman/archive/2006/10/11/526163.html](请注意例子中所使用的坐标系)。在这里必须澄清和强调一个事实,望远镜在竖直指向天空(笛卡儿坐标系z坐标轴方向)的情况下,无法追踪突然转向南方飞行的飞行器的原因,并非是望远镜不能够指向飞行器,而是望远镜无法依赖转向轴的旋转而指向飞行器。归根结底在于望远镜只能依赖x,y两个转向轴进行旋转(请注意这种的表述),想要以x轴旋转改变向量的x坐标不可能。意思是在三维空间的笛卡儿坐标系中,仅仅依赖x,y,z轴并不能旋转某些向量的方向,而所有按欧拉角旋转的矩阵使用的旋转轴是xyz轴。过分理解万向节死锁的原因不可取。个人看法:在绕xyz轴旋转无法旋转目标向量方向时,最多能够引出该绕什么轴旋转的问题。四元数运用的三维空间的变换,跟万向节死锁现象没有太明显的关系,因为无论绕什么轴旋转最终都能转换到绕xyz轴旋转。那么,如何在三维空间中表示向量绕任意轴旋转的公式?

  3. 罗德里格斯旋转公式(Rodrigues’rotation formula)
    罗德里格斯旋转公式,运用向量的点积和叉积的运算,让人大开眼界,又一次填充了我的数学空白。
    向量v绕单位向量k旋转
    向量v绕单位向量k旋转θ 角度后变为向量vrot。向量v可以分解成垂直于和平行于单位向量k的两个分量v以及v,由于无法避开数学公式推导,所以下面的公式推导完全是拷贝的维基百科上的内容。
    v=v+v(1)同样旋转后的vrot=vrot+v其中平行的分量保持不变,只有垂直的分量v在旋转中发生改变为vrot。见下图
    这里写图片描述
    图中的标注(注意坐标轴的方向与计算过程)得出。
    vrot=cosθv+sinθk×v
    最终:
    vrot=v+cosθv+sinθk×v=v+cosθ(vv)+sinθk×v=cosθv+(1cosθ)v+sinθk×v=cosθv+(1cosθ)(kv)k+sinθk×v

    这个等式表示了向量v绕向量k旋转后的结果,虽然这个式子看上去比较简洁,实际上在向量空间中把旋转后的结果vrot的坐标表示出来,还要计算点积和叉积的结果。个人看法:向量的点积和叉积引入公式之后,目的正是为了简化了很大计算量的算式表示形式。还有一些叉积的运算公式,也很巧妙,有兴趣可以参上面的维基链接地址,下文将会引用到这些计算公式。
  4. 四元数与空间旋转变换[Quaternions ]
    如果空间向量v想绕某一个单位向量u旋转α度角,则使用四元数q=cosα2+usinα2以及它的共轭四元数与v进行汉密尔顿积得到的旋转后的新向量:
    v=qvq1=(cosα2+usinα2)v(cosα2usinα2)

    具体证明见:
    这里写图片描述

等式的最后一行就是上节似曾相识的罗德里格斯旋转公式的结论,因此没有问题。第二行的推导还运用了上节提到的向量叉积的计算公式:

u×(v×u)=(uu)v(uv)u
导出:
uvu=(u×vuv)u=(u×v)×u(u×v)u(uv)u=u×(v×u)(uv)u=(uu)v2(uv)u

至此,基本上能够弄清楚四元数的应用于空间向量的旋转的汉密尔顿积的理由,想一想不由感叹得到这个结论的数学家好厉害,在大量的计算中找到四元数的乘积与向量旋转之间的关系,我等只能膜拜,扯太远了。
总结,四元数运用到图形学三维变换中,理由可能还是在于计算复杂方面,还有像插值(没有深入了解)这些方面吧。
参考:
http://www.qiujiawei.com/understanding-quaternions/
https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation
https://en.wikipedia.org/wiki/Triple_product#Vector_triple_product

阅读全文
0 0