四元数

还记得上篇说的轴角法的两个致命缺陷吗?

忘了建议再回看一眼。

四元数是Hamilton爵士于1843年发现的,据说是他正愁三维向量的乘法运算咋整呢,过了一个桥就灵光乍现,懂了!!! 为了感谢这个神桥,就把四元数的运算法则刻上了。

看我的眼神,就是看不起不懂四元数的人
科学史上伟大的桥

四元数刚开始的时候没啥鸟用,还总被嘲笑。直到一百年后应用到量子力学和刚体旋转中,它的巨大意义才体现出来。

我这里不会详细讲解四元数,因为网上的资料已经足够多了,我会在附录中列出来。

我主要讲最必要的关于四元数的基础知识,我的理解,以及用的时候要注意哪些问题。

以下所说的四元数默认是单位四元数,即模为1.

四元数长下面这样,四个数组成,一个实部,三个虚部。

具体的运算规则可参考维基百科。

当我们把四元数整理成一下形式,分为标量和矢量部分,是不是就有一点不一样了??

在这种形式下,四元数被写成了一个角θ和一个三维向量U的组合形式。

一个轴,一个角,这不就是轴角法的描述方式吗?

是的,轴角法和四元数之间几何意义是相同的,并且转化起来很方便。单位四元数可以忽略实部,这可简化记为一个三维向量,这和轴角法就更像了, 区别就是轴角法是轴*θ, 四元数是轴*sin(θ/2)。

因此可以把四元数认为是轴角法的一个数学工具. 它解决了轴角法两个致命的bug。

Bug1:当角度0的时候,轴角法无法求出轴。

四元数曰:那就把轴定为U×sin(θ/2),角度为0时,轴就为零,这就有解了,就是[1 0 0 0].

Bug2:两次轴角法旋转无法做合成,不同的轴角法无法做差。

四元数曰:三维空间是不可能的,再加一维就解决问题了,升维解bug。因此,把一个三维的问题化成一个四维带一个约束的问题,把一个三维的问题化成一个九维带六个约束的问题,这就分别是四元数法和旋转矩阵法。

四元数是如何计算旋转的合成呢?非常简单,物体先旋转了q1,又旋转了q2,两次旋转的合成就相当于一次旋转了 [公式] ,就是四元数的乘法。反过来也成立, [公式] .

就这样,四元数解决了轴角法的两大bug。

接下来看一下那个θ/2,是咋回事,为啥要除2呢。

先给一个公式,一个向量v按照四元数的旋转轴和旋转角旋转得到另一个向量v`.

其中 q*  q 的共轭, q*v*q* 就是三个四元数连乘,可以理解为v被 q  q* 各旋转了一次。

换句话说,如果我们有q=[cos(θ), sin(θ)u],那么  v'=q*v*q*,可以看做v沿着u旋转2θ度。旋转后的v′的实部恰好为0,这样虚部的三维向量就是我们要的v′了。

我们就想旋转θ角度,那旋转一次行不行呢?不行,旋转后的v′的实部不为零,一个三维向量转化成了一个四维向量,这多尴尬,你怎么处理呢?这不是我们要的三维向量旋转。

四元数的乘法还是一个四元数,只有一种特例:除非实部为零。

为什么转两次就ok了呢?看下面这经典的图。

上图的三维超平面代表三维世界(i,j,k),三维向量w在三维超平面上,所以第四维度的大小为0,w在四维空间上表示为【0 b c d】.

如果被四元数q旋转一次,w就变成了箭头指向上方的点,这个点是三维超平面上,这时的第四维度的大小不为零了。w在四维空间上表示为【a b c d】,三维向量被转化为四维向量。这就很尴尬了!!!

如果再继续被 q^-1 旋转一次,恰好就又被转化到三维超平面之上了,就是那个w`,第四维度为0,这时的w`就是一个三维向量了,所以虽然被怪怪的旋转了两次,但是至少三维向量还是三维向量,大不了就把最开始的旋转角度除个2嘛,这个θ/2就是这么来的。

我以上讲了四元数法和轴角法的密切联系,以及四元数一点基础知识。

再补充几个单位四元数的基础知识.

  1. q^-1=q* 这个不需要理解,记下来就行,推导也不难。
  2. q=-q,转轴反了,转角也反了,这用轴角法配合右手法则转一下就知道了,
  3. 通常四元数的计算,为防止截断误差产生的影响,要经常归一化,具体的就是保留矢量部分,重新计算标量部分。

实用主义角度来说, 外行人能把四元数这样简略的直观理解,剩下的查一查公式,就足够了 ,就完全不耽误理解性使用了。毕竟我们的目的是使用四元数作为旋转的工具,不是继续优化四元数,因此更深奥的理解是用不上的。

但是,四元数还是非常的神奇,探寻奥秘本身就是一种快乐,会让你更加深入的理解,如果你有精力,我非常推荐参考一下资料。

1 先看3Blue1Brown的视频,非常的直观,新奇,一定要多看几遍。

2 再看这个

中文翻译在这里,

3 如果你还有精力,那就再看看这个73页的文章

krasjet.github.io/quate

轴角法/四元数(一个轴一个角)这个派就讲完了,接下来要将欧拉角/旋转矩阵(三个角)这一派了 .

这个系列就快到进展一半了。。。

刚体旋转系列

专栏里每一篇都是我一个字一个字打的,都是我认为的原创干货。

欢迎指正讨论,转载请注明,认同请点赞。

这个系列的文章很容易出错,希望大佬们多多指正补充。

仅仅收藏是学不会的,还得点赞。