四元数、对偶四元数与刚体变换

四元数

下面这样定义的就是四元数(Quaternion)(一般用字母 q 表示四元数):

(1.1)q=q0+q1i+q2j+q3k=q0+qvu∈H

其中 i,j,k 满足 i2=j2=k2=−1 且 ij=k=−ji,jk=i=−kj,ki=j=−ij 。

需要注意,这里规定的 ij 是四元数的代数乘法,不是叉乘,也不是点乘。

如果用简单的记法,四元数也可以记为有序对:

(1.2)q=(q0,qv)

如果令实部和虚部分别为0,则有标量四元数和矢量四元数。

简单来说,四元数可以说是复数向三维空间扩展之后的结果。为什么要用3个虚分量?这是因为四元数本质还是代数,需要满足代数的一些性质,而只用2个虚分量的话,无法满足一些代数性质。

四元数的一些基础性质

加法:

(1.1.1)a+b=(a0+b0)+(av+bv)u

数乘:

(1.1.2)λa=λa0+λavu

代数乘法(下面用 ∗ 表示):

(1.1.3)a∗b=(a0b0−av⋅bv,a0bv+b0av+av×bv)
注意

四元数的代数乘法不满足交换律

矢量四元数(纯虚四元数)的乘法:

(1.1.4)avu∗bvu=−av⋅bv+av×bv
Note

如何计算得到式(3)这个结果?先把四元数展开为分量的形式。按代数方式将它们乘起来:

a∗b=(a0+avu)(b0+bvu)=a0b0+(a0av+avb0)u+avu∗bvu

对于最后一项,再展开得细节一些,同时结合开头给出的 i,j,k 的关系:

(a1i+a2j+a3k)∗(b1i+b2j+b3k)=−(a1b1+a2b2+a3b3)+(a2b3−a3b2)i+(a3b1−a1b3)j+(a1b2−a2b1k)=−av⋅bv+av×bv

最后再带回原式,就得到了四元数的代数乘法。

点乘:

a⋅b=a0b0+(av⋅bv)u

共轭:

q∗=q0−qvu

逆:

q−1=q∗||q||2

模长:

||q||=qq∗=q∗q=q02+q12+q22+q32

四元数还有一些常用的性质:

  1. (ab)∗=(b∗a∗)
  2. a∗⋅b∗=a⋅b
  3. a⋅a=||a||2

单位四元数与旋转

需要说明,能表示旋转的是单位四元数,一般的四元数表示的不是纯旋转,而是带一个缩放量。
单位四元数的定义: ||q||=qq∗=1

为什么四元数能表示旋转?可以参考3blue1brown的讲解视频。
可以先在复数平面想象。在复平面内,如果2个复数相乘,比如 i1∗i2 ,可以把左边的函数看作一个函数,作用在右边。假设 i1 是单位复数即 i1i1∗=1 ,则 i1 的作用就对右边的复数进行旋转变换。所以旋转可以用代数相乘来表示。
你可能会想,是不是直接就类比一下四元数就能表示旋转了?基本上是,但这里有个问题,因此刚才复平面的例子里,旋转是在 (1,i) 平面上旋转的。如果直接类比到四元数,则四元数表示的旋转应该是在四维空间中的,不是我们想要的三维空间。于是需要用球极投影把四维的旋转投影为我们可以理解的三维形式。具体如何投影可参见3blue1brown的讲解视频。所以,我们可以认为,当我们用四元数表示旋转时,我们的三维空间被看作了四元数所在四维空间的子空间(纯虚数子空间)。
在四维空间旋转,会出现一个 double spin的现象。因为在四维空间中有充足的维数,因此可以同时在两个独立的平面上进行旋转——这两个平面没有共同的旋转轴,仅在一个点(旋转中心)处相交,因此两个旋转可以相互独立地进行(而在三维中,两个平面总是沿一条直线相交,无法互不干扰地同时旋转)。这和3blue1brown的演示效果是一样的。一个圆的旋转总是会带动另一个圆旋转。
关键的问题是,这2个独立平面中总有一个包含实数轴 w ,而这是不存在于我们的三维空间中的(我们的三维空间被映射为了纯虚子空间,三个轴是 i,j,k )。我们希望的是,每次的旋转只围绕一个平面进行。之前进行旋转操作,都是在被操作对象的左边乘一个数。如果在右边乘一个数,有可能出现抵销。
比如四元数 q=1+2i+3j+4k ,左边乘一个 i 有: iq=i−2+3k−4j=−2+i−4j+3k 。在四维空间中左乘 i 是逆时针旋转90度。可以发现 (1,i) 和 (j,k) 平面都发生了逆时针90度的旋转。可以总结如下:

  • 左乘 i : (1,i),(j,k) 逆时针90度
  • 左乘 j : (1,j),(k,i) 逆时针90度
  • 左乘 k : (1,k),(i,j) 逆时针90度
    尝试右乘一下。如果左右乘 i :
iqi=−1−2i+3j+4k

发现 (1,i) 平面转加倍了,而 (j,k) 平面回去了。
似乎也可以?但一般我们不旋转带实轴的平面,因此右乘 −i ,让 (1,i) 不变,而 j,k 旋转。

Warning

因为纯虚部分的三维子空间才对应我们真实想要的空间,而按理来说,一个纯虚的四元数,旋转后应该还是纯虚的四元数。所以我们不希望带实轴的平面发生改变。

所以我们得到了:要让四元数表示旋转变换,应该满足如下的sandwich样式:

p′=qpq∗,其中p=(0,pv)∈H,q∈H且qq∗=1

可以参考:如何理解旋转时需要同时左乘和右乘

对于单位四元数而言,其可以写作:

(1.2.3)q=(cos⁡θ+sin⁡θu)

其中 u∈H 为单位纯(虚)四元数。

注意

只有在四元数写为极形式时,这个 u 为单位纯虚函数,与标准形式下的 u 不同。

上式的推理过程

利用单位四元数这个条件,把四元数写成有序对的格式。
因为

qq∗=1

所以

(q0,qv)∗(q0,−qv)=1q02−(qvu)2=1q02−(−qvq˙v+qv×qv)q02+qv2=1

于是令 cos⁡α=q0,sin⁡α=qv ,就有之前的格式了

这里的 θ 表示四元数相对于起始点,以 u 为旋转轴逆时针旋转 α 度。(四维空间)

关于角度带不带1/2

由于上文我们得到,要表示旋转变化需要左右各乘一次。因此虽然写的是一个 θ ,但在三维空间中实际旋转的角度为 2θ 。因此我们会看到在别的地方 cos⁡ 内部写的是 θ2 ,那里的 θ 表示的就是三维空间中的实际旋转角度了。

对偶四元数

可能你也发现了,用四元数能表示旋转,但刚体变换不止有旋转变换,还有平移变换。四元数能表示平移吗?可惜,不行。不过,对偶四元数可以。

首先了解什么是对偶数:

对偶数及基础运算

形如:

x^=xr+xdε∈D

的代数就是对偶数(Dual Number)(没有统一的表示字母,本文习惯于用 x^ 表示)。其中, xr 为实部(也称为主部), xd 称为对偶部。
与复数不同的是,复数里虚数单位的 i2=−1 ,而对偶数定义 ε2=0

为了方便,我用 [xr,xd] 这个有序对表示对偶数 x^ 。

对偶数的运算如下:

对偶数的加法:

a^+b^=(ar+br)+ε(ad+bd)

对偶数的数乘:

λa^=λar+λad

对偶数的代数乘法:

a^b^=arbr+(arbd+brad)ε

对偶数的共轭:

a^¯=ar−adε

对偶数的逆:

a^−1=a^¯||a^||2
Note

逆的原始定义与复数、四元数的一样,都是 a^a^¯=1 ,代入就可得。

模长:

||a^||=a^a^¯=|ar|
Note

对偶数的模长有些特殊,其与对偶部无关。

另:对偶数与函数的复合:

f(x^)=f(xr)+f′(xr)(xdε)(Taylor展开即得)

对偶数+四元数 = 对偶四元数

前文我们说到,四元数只能表示旋转。而加上对偶数之后,对偶四元数就可以表示平移和旋转了。

为什么一定要选对偶数作为四元数的扩展?

涉及到对偶数 ε2=0 的性质以及群论的相关知识了。

形如:

q^=qr+qdε,qr,qd∈H,ε2=0

的代数被称为对偶四元数。

对偶四元数的一些性质:

加法和数乘,可以直接参考四元数和对偶数的部分。

dual quaternion的代数乘法:

a^b^=[ar,ad][br,bd]=ar∗br+(ar∗bd+br∗ad)ε,ar,ad,br,bd∈H

参见对偶数乘法和四元数乘法。

共轭:对偶四元数的共轭理论上分三种。

  • 四元数共轭:只共轭四元数部分: q^∗=qr∗+qd∗ε 。
  • 对偶共轭:只共轭对偶数部分: q^¯=qr−qdε 。
  • 总共轭:两个部分都共轭: q^¯∗=qr∗−qd∗ε 。
    对偶四元数的逆,对应的是四元数共轭:
q^−1=q^∗||q^||2

模长:

||q^||2=q^q^∗=[qr,qd][qr∗,qd∗]=qrqr∗+(qrqd∗+qr∗qd)ε=||qr||2+[(qdqr∗)∗+(qdqr∗)]=||qr||2+2εRe(qdqr∗) 根据f(x)=f(xr)+f′(xr)(xdε),有 ||q^||=||qr||2+2εRe(qdqr∗)=||qr||+Re(qdqr∗)2||qr||ε

可以发现,这里模长不是一个普通的数,而是一个对偶数,这与对偶数和四元数的模长都不同。

单位对偶四元数与刚体变换

与“只有单位四元数能表示旋转变换”的原理类似,正常来想,只有单位对偶四元数能表示刚体变换。
单位对偶四元数的定义是:

||q^||=q^q^∗=1
需要注意

这里的 1 指 1+0ε ,因为对偶四元数的模长是一个对偶数,所以同时对主部和对偶部作限制。

对应上节的模长公式,可以得到一个对偶四元数是单位对偶四元数所需要的2条限制:

  1. 主部模长为1: ||qr||=1 。
  2. 对偶部为纯虚四元数: Re(qrqd∗)=0 或 qrqd∗+qr∗qd=0 或 qr⋅qd=0 (正交)。
注意&易错

第2条不能推导出 qd 是纯虚函数,只能推出 qdqr∗ 是纯虚函数。
完成可能存在一组 qr 和 qd 都不为0,但是能产生正交性。

有了单位对偶四元数之后,如何用它来表示刚体运动呢?
对于空间中的刚体变换,我们总是可以分解为平移变换和旋转变换,但这两个变换之间有顺序上的要求。我们定义顺序为“先旋转再平移”。

和四元数表示旋转类似,我们想用一个单位对偶四元数的左乘表示旋转和平移(暂时先考虑只有左乘的情况),那么不妨假设分为2步,第1步旋转,第2步再平移。

根据单位对偶四元数的第1条限制,我们可以得到主部是一个单位四元数,而单位四元数完成可以用于表示旋转,因此目前的问题变成了,什么形式的对偶部可以表示平移。

根据单位对偶四元数的第2条限制,我们知道 qdqr∗ 一定是一个纯虚四元数,而一个三维向量正好可以用一个纯虚四元数表示,因此可以假设 qdqr∗ 表示的三维向量为平移向量,记为 t=αqdqr∗ 。根据这个式子解出对应的 qd 为 qd=tqrα 。

目前,我们暂时地得到了刚体运动的单位对偶四元数格式:

(2.3.2)q^=qr+tαqrε,(α>0)

这里的 t 是平移变量 t 的四元数化的结果,等于 (0,t) 。不过,这里还有一个参数没有被确定: α 。
要确定这个参数,还需要从刚体变换的结果上计算。

这个参数的计算我们后面再说 ,现在我们先考虑另一个重要问题。

考虑三维空间中的一个点 P ,我们把它转换对偶四元数格式: 1+pε 。根据我们在四元数旋转上的经验,应该也会要同时左右乘。而这带来了一个问题,我们如何知道右乘的是什么共轭?

为什么要表示为这个格式?

点在三维空间中类似向量,只有平移信息,没有旋转的信息。而 qr 又必须是单位四元数,所以第1项是 1 。

上面的问题可以利用纯旋转和纯平移来得到。
考虑纯旋转,此时 qd=0 ,只有 qr ,回想四元数所对应的结果,右边肯定是 qr∗ 。因此就在四元数共轭和总共轭之间选择。

其实从数学上讲, qr(1+pε)=qr+qrpε ,而最后空间中的点一定还要满足 1+xε ,因此右边一定是 qr∗

考虑纯平移,此时 qr=1,qd=tα,q^=1+tαε 。相乘得:

(1+tαε)(1+pε)=1+(p+tα)ε

最后还是要满足 1+xε 的格式,可以假设右边是 1+st∗αε,s=±1 ,右乘有:

(2.3.4)[1+(p+tα)ε](1+st∗αε)=1+(st∗α+p+tα)ε

因为: t 是纯虚四元数,所以 t∗=−t ,所以 (2.3.4)有:

(2.3.5)1+(st∗α+p+tα)ε=1+(−stα+p+tα)ε=1+(p+t(1−s)α)ε

我们希望平移后的向量应该是: 1+(p+t)ε ,因此可以推理出: 1−s>0 即 s<0 ,因此最后选择总共轭。

回到公式 (2.3.2),现在我们来确定参数 α 的取值。考虑完整的刚体变换: q^=qr+tαqdε ,对点 p 有:

q^pq^¯=(qr+tαqrε)(1+pε)(qr∗−qr∗t∗αε)=[qr+(qrp+tαqr)ε](qr∗−qr∗t∗αε)=1+(−qrqr∗t∗α+qrpqr∗+tqrqr∗α)ε=1+(qrpqr∗+tqrqr∗−qrqr∗t∗α)ε=1+(qrpqr∗+t+tα)ε=1+(qrpqr∗+2tα)ε

想想用矩阵表示时的样式,我们可以得到: α=2 。所以我们得到了表示刚体运动的单位对偶四元数形式:

(2.3.7)q^=qr+t2qrε

当然,如果要严谨一点,应该还需要把 (2.3.7) 代入计算以验证这确实是刚体变化。不过这里就不代入了,代入后可以证明这是刚体变化。

补充:四元数的幂与螺旋运动

沙勒定理(Chasles Theorem)

刚体的最广义位移等价于一个平移加上一个旋转

单位对偶四元数也能定义幂次,表示其在空间中的螺旋运动的中间的位置。
比如 q^12 表示原变换 q^ 一半的位置。

需要注意

这里的一半不是几何意义上的“距离”或“角度”的一半,而是群意义上的一半:

q^12q^12=q^

因此,会出现变换的“一半”得到的距离比“距离”的一半大的情况。比如旋转90度+位移。

对偶四元数和四元数的幂按统一的定义有:

xα=exp⁡(αln⁡x)

虽然不是单位对偶四元数或单位四元数,也有这个定义,但考虑刚体运动用的也就只是单位对偶四元数,就不讨论非单位的情况了。

两者幂的形式一致,但几何意义有不同。比如同为 12 幂,单位四元数可以表示真实的角度旋转为 12 而单位对偶四元数表示的是旋转和平移的耦合量的一半。

对单位四元数而言,可以写作式 (1.2.3) 的形式,而有幂次后,就只量把角度改为了幂次倍:

qα=cos⁡(αθ)+usin⁡(αθ)

上式的证明相对简单,不过需要有个补充知识,即欧拉公式的四元数推广。

欧拉公式的四元数推广

欧拉公式如下:

eiθ=cos⁡θ+isin⁡θ

而欧拉公式的四元数推广如下:

euθ=cos⁡θ+usin⁡θ,u∈H为单位纯四元数

这个式子的证明用Taylor展开就可,证明见: 此文章

有这个式子后,就可以把 q 写成 euθ ,而 qα=(euθ)α=euθα ,然后再展开就行。 对单位对偶四元数而言,欧拉公式的四元数的推广同样适用。


四元数、对偶四元数与刚体变换
https://levsky-williams.top/posts/ad3d7c03/
作者
Mitnick
发布于
2026年9月30日
许可协议