四元数与旋转变换

数学 同时被 2 个专栏收录
3 篇文章 0 订阅
1 篇文章 0 订阅
  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) u v 之间的乘积可以用向量的运算来表示: 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

  • 1
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值