四元数、对偶四元数与刚体变换
四元数
下面这样定义的就是四元数(Quaternion)(一般用字母
其中
需要注意,这里规定的
是四元数的代数乘法,不是叉乘,也不是点乘。
如果用简单的记法,四元数也可以记为有序对:
如果令实部和虚部分别为0,则有标量四元数和矢量四元数。
简单来说,四元数可以说是复数向三维空间扩展之后的结果。为什么要用3个虚分量?这是因为四元数本质还是代数,需要满足代数的一些性质,而只用2个虚分量的话,无法满足一些代数性质。
四元数的一些基础性质
加法:
数乘:
代数乘法(下面用
四元数的代数乘法不满足交换律
矢量四元数(纯虚四元数)的乘法:
Note
如何计算得到式(3)这个结果?先把四元数展开为分量的形式。按代数方式将它们乘起来:
对于最后一项,再展开得细节一些,同时结合开头给出的
最后再带回原式,就得到了四元数的代数乘法。
点乘:
共轭:
逆:
模长:
四元数还有一些常用的性质:
单位四元数与旋转
需要说明,能表示旋转的是单位四元数,一般的四元数表示的不是纯旋转,而是带一个缩放量。
单位四元数的定义:
为什么四元数能表示旋转?可以参考3blue1brown的讲解视频。
可以先在复数平面想象。在复平面内,如果2个复数相乘,比如
你可能会想,是不是直接就类比一下四元数就能表示旋转了?基本上是,但这里有个问题,因此刚才复平面的例子里,旋转是在
在四维空间旋转,会出现一个 double spin的现象。因为在四维空间中有充足的维数,因此可以同时在两个独立的平面上进行旋转——这两个平面没有共同的旋转轴,仅在一个点(旋转中心)处相交,因此两个旋转可以相互独立地进行(而在三维中,两个平面总是沿一条直线相交,无法互不干扰地同时旋转)。这和3blue1brown的演示效果是一样的。一个圆的旋转总是会带动另一个圆旋转。
关键的问题是,这2个独立平面中总有一个包含实数轴
比如四元数
- 左乘
: 逆时针90度 - 左乘
: 逆时针90度 - 左乘
: 逆时针90度
尝试右乘一下。如果左右乘 :
发现
似乎也可以?但一般我们不旋转带实轴的平面,因此右乘
因为纯虚部分的三维子空间才对应我们真实想要的空间,而按理来说,一个纯虚的四元数,旋转后应该还是纯虚的四元数。所以我们不希望带实轴的平面发生改变。
所以我们得到了:要让四元数表示旋转变换,应该满足如下的sandwich样式:
可以参考:如何理解旋转时需要同时左乘和右乘
对于单位四元数而言,其可以写作:
其中
只有在四元数写为极形式时,这个
上式的推理过程
利用单位四元数这个条件,把四元数写成有序对的格式。
因为
所以
于是令
这里的
由于上文我们得到,要表示旋转变化需要左右各乘一次。因此虽然写的是一个
对偶四元数
可能你也发现了,用四元数能表示旋转,但刚体变换不止有旋转变换,还有平移变换。四元数能表示平移吗?可惜,不行。不过,对偶四元数可以。
首先了解什么是对偶数:
对偶数及基础运算
形如:
的代数就是对偶数(Dual Number)(没有统一的表示字母,本文习惯于用
与复数不同的是,复数里虚数单位的
为了方便,我用
对偶数的运算如下:
对偶数的加法:
对偶数的数乘:
对偶数的代数乘法:
对偶数的共轭:
对偶数的逆:
逆的原始定义与复数、四元数的一样,都是
模长:
对偶数的模长有些特殊,其与对偶部无关。
另:对偶数与函数的复合:
对偶数+四元数 = 对偶四元数
前文我们说到,四元数只能表示旋转。而加上对偶数之后,对偶四元数就可以表示平移和旋转了。
涉及到对偶数
形如:
的代数被称为对偶四元数。
对偶四元数的一些性质:
加法和数乘,可以直接参考四元数和对偶数的部分。
dual quaternion的代数乘法:
共轭:对偶四元数的共轭理论上分三种。
- 四元数共轭:只共轭四元数部分:
。 - 对偶共轭:只共轭对偶数部分:
。 - 总共轭:两个部分都共轭:
。
对偶四元数的逆,对应的是四元数共轭:
模长:
可以发现,这里模长不是一个普通的数,而是一个对偶数,这与对偶数和四元数的模长都不同。
单位对偶四元数与刚体变换
与“只有单位四元数能表示旋转变换”的原理类似,正常来想,只有单位对偶四元数能表示刚体变换。
单位对偶四元数的定义是:
这里的
对应上节的模长公式,可以得到一个对偶四元数是单位对偶四元数所需要的2条限制:
- 主部模长为1:
。 - 对偶部为纯虚四元数:
或 或 (正交)。
第2条不能推导出
完成可能存在一组
有了单位对偶四元数之后,如何用它来表示刚体运动呢?
对于空间中的刚体变换,我们总是可以分解为平移变换和旋转变换,但这两个变换之间有顺序上的要求。我们定义顺序为“先旋转再平移”。
和四元数表示旋转类似,我们想用一个单位对偶四元数的左乘表示旋转和平移(暂时先考虑只有左乘的情况),那么不妨假设分为2步,第1步旋转,第2步再平移。
根据单位对偶四元数的第1条限制,我们可以得到主部是一个单位四元数,而单位四元数完成可以用于表示旋转,因此目前的问题变成了,什么形式的对偶部可以表示平移。
根据单位对偶四元数的第2条限制,我们知道
目前,我们暂时地得到了刚体运动的单位对偶四元数格式:
这里的
要确定这个参数,还需要从刚体变换的结果上计算。
这个参数的计算我们后面再说 ,现在我们先考虑另一个重要问题。
考虑三维空间中的一个点
点在三维空间中类似向量,只有平移信息,没有旋转的信息。而
上面的问题可以利用纯旋转和纯平移来得到。
考虑纯旋转,此时
其实从数学上讲,
,而最后空间中的点一定还要满足 ,因此右边一定是
考虑纯平移,此时
最后还是要满足
因为:
我们希望平移后的向量应该是:
回到公式 (2.3.2),现在我们来确定参数
想想用矩阵表示时的样式,我们可以得到:
当然,如果要严谨一点,应该还需要把 (2.3.7) 代入计算以验证这确实是刚体变化。不过这里就不代入了,代入后可以证明这是刚体变化。
补充:四元数的幂与螺旋运动
刚体的最广义位移等价于一个平移加上一个旋转
单位对偶四元数也能定义幂次,表示其在空间中的螺旋运动的中间的位置。
比如
这里的一半不是几何意义上的“距离”或“角度”的一半,而是群意义上的一半:
因此,会出现变换的“一半”得到的距离比“距离”的一半大的情况。比如旋转90度+位移。
对偶四元数和四元数的幂按统一的定义有:
虽然不是单位对偶四元数或单位四元数,也有这个定义,但考虑刚体运动用的也就只是单位对偶四元数,就不讨论非单位的情况了。
两者幂的形式一致,但几何意义有不同。比如同为
对单位四元数而言,可以写作式 (1.2.3) 的形式,而有幂次后,就只量把角度改为了幂次倍:
上式的证明相对简单,不过需要有个补充知识,即欧拉公式的四元数推广。
有这个式子后,就可以把