对偶四元数基础 | HyperPlane

对偶四元数基础

对偶四元数将平移和旋转放在同一个状态量中,而不是将它们分开。对偶四元数形式上由对偶数和四元数的概念组合而成。

对偶数

对偶数于复数类似由两部分组成,但是并不是同一个东西,具体来看。对偶数可以写成

z=r+dεz = r + d \varepsilon

其中rr为实部,dd为对偶部;ε\varepsilon为对偶算子,表示ε2=0\varepsilon^2 = 0但是ε0\varepsilon \neq 0。和复数类似,ii是用来区分实部和虚部的,但是ε\varepsilonii的实际意义不一样。

基本运算

对偶数加法

(rA+dAε)+(rB+dBε)=(rA+rB)+(dA+dB)ε(r_A + d_A \varepsilon) + (r_B + d_B \varepsilon) = (r_A + r_B) + (d_A + d_B)\varepsilon

对偶数乘法

(rA+dAε)(rB+dBε)=rArB+rAdBε+rBdAε+dAdBε2=rArB+(rAdB+rBdA)ε\begin{aligned} (r_A + d_A \varepsilon)(r_B + d_B \varepsilon) &= r_Ar_B + r_Ad_B\varepsilon + r_Bd_A\varepsilon + d_Ad_B\varepsilon^2 \\ &= r_Ar_B + (r_Ad_B + r_Bd_A)\varepsilon \end{aligned}

对偶数除法

(rA+dAε)(rB+dBε)=(rA+dAε)(rB+dBε)(rAdAε)(rBdBε)=rArB+(rBdArAdB)ε(rB)2=rArBrB2+rBdArAdBrB2ε\begin{aligned} \frac{(r_A + d_A \varepsilon)}{(r_B + d_B \varepsilon)} &= \frac{(r_A + d_A \varepsilon)}{(r_B + d_B \varepsilon)} \frac{(r_A - d_A \varepsilon)}{(r_B - d_B \varepsilon)} \\ &= \frac{r_Ar_B + (r_Bd_A - r_Ad_B)\varepsilon}{(r_B)^2} \\ &= \frac{r_Ar_B}{r_B^2} + \frac{r_Bd_A - r_Ad_B}{r_B^2}\varepsilon \end{aligned}

加法和乘法都都很普通没什么意思,这个除法可以注意一下,分母是被除数实部的平方。

对偶数微分

基本形式上没有什么特别的

ddxs(x)=limδx0s(x+δx)s(x)δx\frac{\mathrm{d}}{\mathrm{dx}} \mathbf{s}(x) = \lim_{\delta x \rightarrow 0}\frac{\mathbf{s}(x + \delta x) - \mathbf{s}(x)}{\delta x}

对偶数的导数是另一个对偶数,参考对偶数除法。
值得注意的是,对偶数的对偶算子条件是ε2=0\varepsilon^2 = 0,这给我们使用泰勒展开带来了相当多的便利。

f(rA+dAε)=f(rA)+f(rA)1!dAε+f(rA)2!(dAε)2+f(rA)3!(dAε)3+=f(rA)+f(rA)dAε\begin{aligned} f(r_A + d_A\varepsilon) &= f(r_A) + \frac{f'(r_A)}{1!}d_A\varepsilon + \frac{f''(r_A)}{2!}(d_A\varepsilon)^2 + \frac{f'''(r_A)}{3!}(d_A\varepsilon)^3 + \dots \\ &= f(r_A) + f'(r_A)d_A\varepsilon \end{aligned}

注意,这里是等于哦,不是约等于哦。不需要什么去掉多阶项线性化,展开就只有一阶项。

四元数

(都是Hamilton)
四元数是复数的一个扩展,基本形式为:

q=w+(xi+yj+zk)\mathbf{q} = w + (x \mathbf{i} + y \mathbf{j} + z \mathbf{k})

q=(w,v)\mathbf{q} = (w, \mathbf{v})

每个元素含义的细节不说了,没啥好写的很多地方都有。

四元数计算

数乘,ss是数值

sq=(sw,sv)s \mathbf{q} = (sw, s\mathbf{v})

加法

q1+q2=(w1+w2,v1+v2)\mathbf{q}_1 + \mathbf{q}_2 = (w_1 + w_2, \mathbf{v}_1 + \mathbf{v}_2)

乘法

q1q2=(w1w2v1v2,w1v2+w2v1+(v1×v2))\mathbf{q}_1 \mathbf{q}_2 = (w_1w_2 - v_1v_2, w_1\mathbf{v}_2 + w_2\mathbf{v}_1 + (\mathbf{v}_1 \times \mathbf{v}_2))

共轭

q=(w,v)\mathbf{q}^* = (w, -\mathbf{v})

模长

q=qq\| \mathbf{q} \| = \mathbf{q} \mathbf{q}^*

对于单位四元数而言,有q=1\|\mathbf{q}\| = 1。单位四元数可以表示三维空间中绕轴n\mathbf{n}旋转角度θ\theta的旋转:

q=(cos(θ2),nsin(θ2))\mathbf{q} = (\cos(\frac{\theta}{2}), \mathbf{n} \sin (\frac{\theta}{2}))

对偶四元数最大的优势就在于它插值特别顺滑。

对偶四元数

把对偶数和四元数结合起来,我们得到了对偶四元数

q=qr+qdε\mathbf{q} = \mathbf{q}_r + \mathbf{q}_d \varepsilon

其中qr\mathbf{q}_rqd\mathbf{q}_d都是四元数。

对偶四元数计算

数乘

sq=sqr+sqdεs \mathbf{q} = s \mathbf{q}_r + s \mathbf{q}_d \varepsilon

加法

q1+q2=qr1+qr2+(qd1+qd2)ε\mathbf{q}_1 + \mathbf{q}_2 = \mathbf{q}_{r1} + \mathbf{q}_{r2} + (\mathbf{q}_{d1} + \mathbf{q}_{d2})\varepsilon

乘法

q1q2=qr1qr2+(qr1qd2+qd1qr2)ε\mathbf{q}_1\mathbf{q}_2 = \mathbf{q}_{r1} \mathbf{q}_{r2} + (\mathbf{q}_{r1}\mathbf{q}_{d2} + \mathbf{q}_{d1} \mathbf{q}_{r2})\varepsilon

共轭

q=qr+qdε\mathbf{q}^* = \mathbf{q}_r^* + \mathbf{q}_d^* \varepsilon

模长

q=qq\| \mathbf{q} \| = \mathbf{q} \mathbf{q}^*

单位条件

q=1qrqd+qdqr=0\begin{aligned} \|\mathbf{q}\| &= 1 \\ \mathbf{q}_r^* \mathbf{q}_d + \mathbf{q}_d^* \mathbf{q}_r &= 0 \end{aligned}

单位对偶四元数是我们的关注重点,因为我们使用它来表示刚性变换。

与刚性变换关系

单位对偶四元数里面包含的刚性变换的信息为:

qr=rqd=12tr\begin{aligned} \mathbf{q}_r &= \mathbf{r} \\ \mathbf{q}_d &= \frac{1}{2} \mathbf{tr} \end{aligned}

其中r\mathbf{r}是由单位四元数表示的旋转;t\mathbf{t}是四元数表示的平移,t=(0,v)\mathbf{t} = (0,\overrightarrow{\mathbf{v}})

纯平移和纯旋转就不写了,简单推一推就有了。

和矩阵形式一样,对偶四元数表示多个刚性变换的结合也是连乘。

存在一个点p\mathbf{p},使用对偶四元数对它进行刚性变换的时候,计算公式和四元数类似,为

p=qpq\mathbf{p}' = \mathbf{qpq}^*

其中q\mathbf{q}q\mathbf{q}^*分别为对偶四元数表示的变换和它的共轭;p\mathbf{p}p\mathbf{p}'分别为变换前和变换后的点。

参考文献

[1]B. Kenwright, “A Beginners Guide to Dual-Quaternions”