四元数
还记得上篇说的轴角法的两个致命缺陷吗?
忘了建议再回看一眼。
四元数是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就是这么来的。
我以上讲了四元数法和轴角法的密切联系,以及四元数一点基础知识。
再补充几个单位四元数的基础知识.
- q^-1=q* 这个不需要理解,记下来就行,推导也不难。
- q=-q,转轴反了,转角也反了,这用轴角法配合右手法则转一下就知道了,
- 通常四元数的计算,为防止截断误差产生的影响,要经常归一化,具体的就是保留矢量部分,重新计算标量部分。
实用主义角度来说, 外行人能把四元数这样简略的直观理解,剩下的查一查公式,就足够了 ,就完全不耽误理解性使用了。毕竟我们的目的是使用四元数作为旋转的工具,不是继续优化四元数,因此更深奥的理解是用不上的。
但是,四元数还是非常的神奇,探寻奥秘本身就是一种快乐,会让你更加深入的理解,如果你有精力,我非常推荐参考一下资料。
1 先看3Blue1Brown的视频,非常的直观,新奇,一定要多看几遍。
2 再看这个
中文翻译在这里,
3 如果你还有精力,那就再看看这个73页的文章
https://krasjet.github.io/quaternion/
轴角法/四元数(一个轴一个角)这个派就讲完了,接下来要将欧拉角/旋转矩阵(三个角)这一派了 .
这个系列就快到进展一半了。。。
刚体旋转系列
专栏里每一篇都是我一个字一个字打的,都是我认为的原创干货。
欢迎指正讨论,转载请注明,认同请点赞。
这个系列的文章很容易出错,希望大佬们多多指正补充。
仅仅收藏是学不会的,还得点赞。
评论(0)
您还未登录,请登录后发表或查看评论