版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
之前在毕设里做过的一些理论分析,我想并非全无意义,这边罗列下来:
一、四元数定义
Hamilton 在1843 年经过了长达十多年的思考,试图将复数归纳为三维,在此过程中发现了四元数。 利用三个复数来构造四维空间。正如在三维空间内去表述二维的旋转是十分容易的,以此类推,在四维空间中去表述三维的旋转要容易和简便的多。事实上也的却如此,并且利用四元数表示旋转相比较于欧拉旋转来说,最大的优点就是有效避免了万向节锁(Gimbal Lock)。带来万向节锁的本质原因还是在于,利用欧拉旋转去表述三维物体旋转的时候, 是按照一定的坐标顺序,并且存在着第一层级、第二层级和第三层级。 但两层级在同一水平面的时候就会带来万向节锁的问题。无法正确的去表示原来三维物体的旋转。此外,利用四元数表示三维旋转的最直接的优点就是,表示旋转仅仅只需要 4 个数,而矩阵旋转需要 9 个数来表述。这样一来大大的简化了计算(进行两次旋转的时候只需要进行 16 次乘法和 12 次加法操作)。下面给出四元数的定义:
其中 i,j,k 均是虚数,满足以下规律:
并且对单位四元数进行定义,即满足四元数的模为 1:
当?0 = 0的时候,此时的四元数也可以称之为纯四元数。
那么如何用四元数去表示三维物体的旋转的, 首先可以想象在原先的三维坐标系中,用三维坐标去表示点的空间位置。但所有的三维坐标的点集的模都是等于 1 的时候,也就是可以说,这些点集构成了单位球的球面。同理单位四元数抽象成向量,则是存在于四维空间里的球面上。那么任意的四维旋转都可以拆分成一个左旋转和一个右旋转,即?????。而且这样的乘积结果依旧保持了是一个四元数,满足最基本的性质。
二、四元数推导过程
先来看复数旋转,在如图的复平面上:
如果将 P 旋转θ角度得到 P1,且设 P1 的坐标为(x,y),则可以先定义另一个复数 q:
则根据三角函数,在复平面上 x,y 的关系如下:
而若是将原先 P 点乘以复数 q,将得到:
由此可以发现,在原复数上乘一个复数,即可以表示复数旋转。那么在三维空间里按照常理应该是在加入两个复数来构造三维复平面,并且可以去定义两个“三元数”,即