四元数笔记

四元数笔记之前有一点复数基础,看了 3Blue1Brown 的四元数理解视频,但是还是没有完全理解四元数是怎么表示旋转的

在小豆发视频后,通过参考一篇知乎文章,加上自己的思考,终于大致理解了四元数的运作,可喜可贺可喜可贺

为此在这里把拼图大致总结一下,以表纪念

状态与作用数字是一个状态,也能表示一个作用。能这么做的前提是有一个用单位作用表示的基准状态,在这里是 1

例如,当用一个数字去乘时

2表示将1放缩为原来的2倍

-1表示将1反转

0表示将1长度归零

1本身表示什么都不做

一个数的 n次方 表示做这个动作 n 次

0次方 表明做 0 次,也就是什么都不做,所以任意数的 0次方 都是 1

-1次方 是对应操作的逆,可以还原对应操作造成的影响

复数我们定义一个新的作用 iii, 让 i2=−1i^2=-1i2=−1

如果 −1-1−1 是将 111 反转 180 度,不妨认为,iii 的作用是将 111 旋转 90 度

我们不知道这个与实数轴垂直的方向在哪里,但是这不重要

以 {1,i}\{1, i\}{1,i} 作为平面直角坐标系的标准正交基,坐标 (a,b)(a,b)(a,b) 表示 a+iba+iba+ib 作为一个向量,称为复平面

复数的线性组合很显然的,数乘复数对应数乘向量,复数相加对应在复平面内将复数作为向量相加

因此复数可以像向量一样进行线性组合

若 a,b,ca,b,ca,b,c 都是复数,(a+b)c(a+b)c(a+b)c 可以分解, a(b+c)a(b+c)a(b+c) 也可以分解

以基的视角来看,有两个互逆运算,假设这组向量作为列向量构成矩阵 AAA

对一组向量进行系数为 XXX 的线性组合得到向量 VVV,就是以基下的坐标 XXX 绘制 VVVV=AXV=AXV=AX 求 VVV分解 VVV 得到关于一组向量的线性组合系数 XXX,就是求 VVV 在这个基下的坐标 XXXAX=VAX=VAX=V 或 X=A−1VX=A^{-1}VX=A−1V 求 XXX特别地,若这组基是标准正交基,可以是 X=ATVX=A^{T}VX=ATV 求 XXX例如,任何复数 a+iba+iba+ib 都可以看作基向量 111 和 iii 的线性组合,其中 aaa 和 bbb 就是其在该基下的坐标

当我们考虑一个作用对于全体向量的影响时,只考虑它对基的影响,就能得到它对全体向量的影响,因为全体向量都是基的线性组合

i 的作用iii 作用于基 {1,i}\{1, i\}{1,i} 时让基逆时针旋转90度,成了 {i,−1}\{i, -1\}{i,−1}

因此它对于任意复数的作用是逆时针旋转90度

单位复数纯旋转对应在单位圆上的复数 cos⁡θ+isin⁡θ\cos\theta+i\sin\thetacosθ+isinθ,它将任意向量逆时针旋转 θ\thetaθ

cos⁡θ+isin⁡θ\cos\theta+i\sin\thetacosθ+isinθ 作用于 111,得到它本身,正是将 111 旋转 θ\thetaθ 后的向量

cos⁡θ+isin⁡θ\cos\theta+i\sin\thetacosθ+isinθ 作用于 iii,等于对 iii (90度)旋转 θ\thetaθ 后的向量

我们不用去计算复杂的式子,只要意识到复数乘法是可交换的,作用于 iii 等价于被 iii 作用,于是等价于在旋转 θ\thetaθ 基础上再加90度

由于任何复数都是 1 和 i 的线性组合,因此这个乘法将整个复平面上的点都旋转了 θ\thetaθ。

但是它为什么能旋转?我们看看另一个角度

它对任意复数的作用可以分解为 cos⁡θ\cos\thetacosθ 和 isin⁡θi\sin\thetaisinθ,分别对应“当前方向乘 cos⁡θ\cos\thetacosθ 的放缩”和“当前方向垂直方向上乘 sin⁡θ\sin\thetasinθ 的放缩”,而总影响是它们的组合,也就是旋转

重要的是,这个垂直方向由乘 iii 给出,告诉了我们要往哪个方向旋转

这个统一性来自于 iii 作用于基向量都是逆时针旋转90度,来自于 iii 正好是 111 逆时针旋转90度

任意复数可以将任意复数 zzz 的作用分解为放缩和旋转(记 erz=∣z∣e^{r_z}=|z|erz​=∣z∣)

z=erz(cos⁡θz+isin⁡θz)=erz+iθzz=e^{r_z}(\cos\theta_z+i\sin\theta_z)=e^{r_z+i\theta_z} z=erz​(cosθz​+isinθz​)=erz​+iθz​

于是可独立计算放缩和旋转,互不影响

zw=erz+iθzerw+iθw=e(rz+rw)+i(θz+θw)zw=e^{r_z+i\theta_z}e^{r_w+i\theta_w}=e^{(r_z+r_w)+i(\theta_z+\theta_w)} zw=erz​+iθz​erw​+iθw​=e(rz​+rw​)+i(θz​+θw​)

很容易可以得出复数相乘等于分别计算其长度乘积和旋转之和

以基的视角,对基的影响就是对整个空间的影响,当我们考虑一个复数 zzz 对任意复数的影响时,zzz 左乘原本的基 {1,i}\{1, i\}{1,i} 就得到了新的基 {z,iz}\{z, iz\}{z,iz}

好像将原本的 111 拉到了 zzz,将 iii 拉到了 iziziz,而整个空间都随之变换

四元数复数的定义并没有限定虚数单位是唯一的,可以有许多个方向都与实数轴垂直

前人的努力表明,不能仅仅通过两个虚部来构建一个满足结合律、且能恰当表示旋转的代数系统,这个问题有严格证明,但是我不清楚也不关心这个问题

数学百科 - 三元数总之,当我们引入三个互相垂直的虚部 i,j,ki, j, ki,j,k 并定义它们的乘法规则,这个系统才能够完备地表达三维旋转

定义

i2=j2=k2=ijk=−1i^2=j^2=k^2=ijk=-1i2=j2=k2=ijk=−1

这包含了四元数的一切性质。我们能推导出四元数满足以下运算

ij=−ji=kjk=−kj=iki=−ik=j\begin{matrix}ij = -ji = k\\ jk = -kj = i\\ ki = -ik = j\end{matrix}ij=−ji=kjk=−kj=iki=−ik=j​

它不满足乘法交换律,左乘和右乘是不对称的、不可交换的

{1,i,j,k}\{1,i,j,k\}{1,i,j,k} 相互垂直,构成四维空间,{i,j,k}\{i,j,k\}{i,j,k} 按照右手标架组成三维空间,将实数轴隐藏起来,这是后面我们描述旋转的基础

四元数的线性组合对四元数进行数乘和相加与复数情况类似,这意味着我们能将四元数像向量一样进行线性组合

但由于四元数不遵循交换律,我们接下来考虑作用时默认是左乘

i/j/k 的作用由定义很容易看出 i/j/ki/j/ki/j/k 对几个基的作用,于是左乘 i/j/ki/j/ki/j/k 带来了如下的影响

在 {1,i/j/k}\{1, i/j/k\}{1,i/j/k} 平面内,按照 1→i/j/k1 \rightarrow i/j/k1→i/j/k 旋转(90 度)在 ijkijkijk 空间内与 i/j/ki/j/ki/j/k 相垂直平面内,按照右手定则旋转(90 度)任意四元数都能投影分解到这两个平面,并受到对应的影响

就像复平面的单位圆旋转有一个方向 iii,四维空间的单位超球面旋转有3个方向 i/j/ki/j/ki/j/k

单位向量显然整个 ijkijkijk 空间都与 111 垂直。容易证明,ijkijkijk 单位球面上任意一点 hhh 都有 h2=−1h^2=-1h2=−1

hhh 作用于 {1,h}\{1, h\}{1,h} 得到 {h,−1}\{h, -1\}{h,−1},左乘 hhh 带来了如下影响

在 {1,h}\{1, h\}{1,h} 平面内,按照 1→h1 \rightarrow h1→h 旋转(90 度)第二个性质不是那么好证

在 ijkijkijk 空间内与 hhh 相垂直平面内,按照右手定则旋转(90 度)我们证明一个更大的结论:

ijkijkijk 空间内的两个向量相乘,结果可以分解为实数加 ijkijkijk 空间内一点:

在实数轴上是向量点乘的相反数在 ijkijkijk 空间内是向量叉乘(iq1+jq2+kq3)(iu1+ju2+ku3)=(iiq1u1+jjq2u2+kkq3u3)+(jkq2u3+kjq3u2)+(ikq1u3+kiq3u1)+(ijq1u2+jiq2u1)=−(q1u1+q2u2+q3u3)+i∣q2q3u2u3∣−j∣q1q3u1u3∣+k∣q1q2u1u2∣=−(q1u1+q2u2+q3u3)+∣ijkq1q2q3u1u2u3∣\begin{align*} &(iq_1+jq_2+kq_3)(iu_1+ju_2+ku_3)\\ =&(iiq_1u_1+jjq_2u_2+kkq_3u_3)\\ &+(jkq_2u_3+kjq_3u_2)+(ikq_1u_3+kiq_3u_1)+(ijq_1u_2+jiq_2u_1)\\ =&-(q_1u_1+q_2u_2+q_3u_3)\\ &+i\begin{vmatrix}q_2&q_3\\u_2&u_3\end{vmatrix}-j\begin{vmatrix}q_1&q_3\\u_1&u_3\end{vmatrix}+k\begin{vmatrix}q_1&q_2\\u_1&u_2\end{vmatrix}\\ =&-(q_1u_1+q_2u_2+q_3u_3)+\begin{vmatrix}i&j&k\\q_1&q_2&q_3\\u_1&u_2&u_3\end{vmatrix} \end{align*} ===​(iq1​+jq2​+kq3​)(iu1​+ju2​+ku3​)(iiq1​u1​+jjq2​u2​+kkq3​u3​)+(jkq2​u3​+kjq3​u2​)+(ikq1​u3​+kiq3​u1​)+(ijq1​u2​+jiq2​u1​)−(q1​u1​+q2​u2​+q3​u3​)+i​q2​u2​​q3​u3​​​−j​q1​u1​​q3​u3​​​+k​q1​u1​​q2​u2​​​−(q1​u1​+q2​u2​+q3​u3​)+​iq1​u1​​jq2​u2​​kq3​u3​​​​

因此 h2=−1h^2=-1h2=−1,因为单位向量与自己点乘为 111,叉乘为 000

hhh 作用于 ijkijkijk 空间内与 hhh 相垂直平面的基 {f,g}\{f, g\}{f,g},得到的点乘为 000,叉乘满足右手定则于是旋转90度,证明了结论。

这定义了单位超球面往任意一个方向 hhh 旋转90度对应的作用

单位四元数于是我们可以定义单位超球面上的四元数 q=cos⁡θ+hsin⁡θq=\cos\theta+h\sin\thetaq=cosθ+hsinθ

这定义了单位超球面往任意一个方向 hhh 旋转 θ\thetaθ 对应的作用

在 {1,h}\{1, h\}{1,h} 平面内,按照 1→h1 \rightarrow h1→h 旋转 θ\thetaθ在 ijkijkijk 空间内与 hhh 相垂直平面内,按照右手定则旋转 θ\thetaθ任意四元数都能投影分解到这两个平面,并受到对应的影响

表现就是,一方面在 ijkijkijk 空间内绕 hhh 旋转,另一方面关于 {1,h}\{1, h\}{1,h} 在虚实之间旋转,影响实部和 hhh 方向虚部的比例

这就是四维双旋转

球极投影我们需要将四元数应用于旋转,其放缩作用是多余的。因此只考虑单位超球面,它的维度是3,而可以映射到三维空间内

3Blue1Brown 使用了一种形象的方式进行这个映射,以帮助理解四维双旋转

怎么做呢?将四维空间想象成三维的,竖轴是实数轴,“水平面”对应目标空间,那么四维超球面对应“单位球面”,目标空间内单位球面对应“平面”上“单位圆”,正上方是 111,正下方是 −1-1−1,怎么将“单位球面”投影到“水平面”上实现这样的目的呢:

单位球面与 ijkijkijk 空间的单位球面相同,111 映射到原点,−1-1−1 映射到无穷远处,三维空间一点可以表示单位超球面上的任意四元数(−1-1−1除外)

这样:连接 −1-1−1 与超球面上的四元数,这个连线(以及其延长线)与“平面”的交点就是其投影位置,这就是 3Blue1Brown 所使用的投影方式

000 不在这个投影空间内,原点是 111 表示不变,而空间中任意一点与原点的距离都相等,就像一个开了 360360360 度广角的屏幕,只是这个屏幕是三维空间

注意到,你从 −1-1−1 看向 111,单位球面的位置与你的视线垂直

空间内的点与 q=cos⁡θ+hsin⁡θq=\cos\theta+h\sin\thetaq=cosθ+hsinθ 对应, hhh 在单位球面上,只有这个位置没有任何扭曲,向内对应前半球延伸到原点 111,而向外对应后半球延伸到无穷远处 −1-1−1

qqq 的作用是对一个四维超球的刚体旋转,其球面的旋转有三个自由度,从原点指向外面所有方向

当 qqq 作用于整个空间,相当于四维超球面向着一个唯一方向 hhh 进行了一个整体旋转,111 移动到 qqq,投影空间内所有点都会跟着变化

很显然离原点的距离与旋转程度正相关(准确来说距离 r=tan⁡(θ/2)r=\tan(\theta/2)r=tan(θ/2))。且关于原点对称的点互为逆

6个点标注了三维球面的旋转,而加上原点和无穷远点,8个点标注了四维超球面的旋转

3个相互垂直的圆划分了三维球面,在二维被投影为三个相互垂直的直线和圆,在四维超球面这里被投影为四个相互垂直的球面和平面

如同三维球绕旋转轴旋转,交球面于两点,这两点不动;四维球绕 ijkijkijk 空间内与 hhh 垂直的“旋转面”旋转,交超球面于一个圆,不同的是这个圆是一起旋转的

可以看到原点和无穷远点与单位球面垂直,单位球面上的点与其过原点的法平面垂直,当其向外移动时,会从原点“拉扯”这个平面,以其法平面与球面相交的圆为界,内部被拉扯而外部远离,当其移动到无穷远点时便重新拉扯到了单位球面

任意四元数就像任意复数分解到实数轴和虚数轴一样,我们可以将任意四元数分解为标量和向量,即 q=q0+hqhq = q_0+hq_hq=q0​+hqh​,其中 hhh 为方向(单位向量),qhq_hqh​ 为长度

更一般地,可以将任意四元数 qqq 的作用分解为放缩和旋转

q=∣q∣(cos⁡θq+hsin⁡θq)q=|q|(\cos\theta_q+h\sin\theta_q) q=∣q∣(cosθq​+hsinθq​)

由于数乘和四元数总是可交换的,于是可以将数乘都放到一起计算,这也验证了四元数乘法模长守恒

qu=∣q∣(cos⁡θq+hsin⁡θq)∣u∣(cos⁡θu+gsin⁡θu)=∣q∣∣u∣(cos⁡θq+hsin⁡θq)(cos⁡θu+gsin⁡θu)\begin{align*} qu=&|q|(\cos\theta_q+h\sin\theta_q)|u|(\cos\theta_u+g\sin\theta_u)\\ =&|q||u|(\cos\theta_q+h\sin\theta_q)(\cos\theta_u+g\sin\theta_u) \end{align*} qu==​∣q∣(cosθq​+hsinθq​)∣u∣(cosθu​+gsinθu​)∣q∣∣u∣(cosθq​+hsinθq​)(cosθu​+gsinθu​)​

取反、共轭、逆、右乘关于如何取反,有几个容易混淆的操作需要区分

相反数完全取反意味着相反数,这是最直观的取反(−q-q−q)

我们将取反也视为一个作用,相反数与原四元数数在四维空间关于原点对称,那么其作用结果相比原作用结果也在四维空间关于原点对称

(−q)u=−(qu)(-q)u = -(qu) (−q)u=−(qu)

实部会反向,虚部也会反向,于是 {1,h}\{1, h\}{1,h} 旋转和虚空间旋转都在原来的基础上增加180度

−∣h∣(cos⁡θ+hsin⁡θ)=∣h∣(cos⁡(θ+π)+hsin⁡(θ+π))-|h|(\cos\theta+h\sin\theta) = |h|(\cos(\theta+\pi)+h\sin(\theta+\pi)) −∣h∣(cosθ+hsinθ)=∣h∣(cos(θ+π)+hsin(θ+π))

另外,可以注意到取反与四元数是可交换的,先取反再作用与先作用再取反等价

q(−u)=(−q)uq(-u) = (-q)u q(−u)=(−q)u

共轭只取反虚部被定义为共轭(q∗q^*q∗)

四元数与其共轭在 ijkijkijk 空间内的分量关于原点对称

共轭不改变角度大小,具体来说,意味着角度取反

∣h∣(cos⁡θ−hsin⁡θ)=∣h∣(cos⁡(−θ)+hsin⁡(−θ))|h|(\cos\theta-h\sin\theta) = |h|(\cos(-\theta)+h\sin(-\theta)) ∣h∣(cosθ−hsinθ)=∣h∣(cos(−θ)+hsin(−θ))

于是对于单位四元数(纯旋转)有:

q−1=q∗q^{-1}=q^* q−1=q∗

而对于一般四元数,只是将旋转取逆,而放缩不变,因此

q∗q=∣q∣2q^*q=|q|^2 q∗q=∣q∣2

逆四元数的逆意味着能还原它造成的影响(q−1q^{-1}q−1)

不仅反向旋转,也反向放缩

q−1q=1q^{-1}q = 1 q−1q=1

于是

q∗q=∣q∣2=∣q∣2q−1qq^*q=|q|^2=|q|^2q^{-1}q q∗q=∣q∣2=∣q∣2q−1q

便得到了

q−1=q∗∣q∣2q^{-1} = \frac{q^*}{|q|^2} q−1=∣q∣2q∗​

右乘由 hhh 对虚部的作用可以看出:实部是点乘,满足交换律;而虚部是叉乘,交换时反号

这是唯一不遵循交换律的地方,导致了右乘 hhh 时

在 {1,h}\{1, h\}{1,h} 平面内的四元数,按照 1→h1 \rightarrow h1→h 旋转(90 度)(与左乘一致)在 ijkijkijk 空间内与 hhh 相垂直平面内的四元数,按照右手定则反向旋转(90 度)继而导致了右乘单位四元数 cos⁡θ+hsin⁡θ\cos\theta+h\sin\thetacosθ+hsinθ 时

在 {1,h}\{1, h\}{1,h} 平面内的四元数,按照 1→h1 \rightarrow h1→h 旋转 θ\thetaθ(与左乘一致)在 ijkijkijk 空间内与 hhh 相垂直平面内的四元数,按照右手定则反向旋转 θ\thetaθ于是便能推广到任意四元数,得到结论

右乘和左乘任意四元数的唯一区别在于,会反向虚空间内的旋转

至此,我们得到了它们的关系

相反数只是单纯的取反,且满足交换律取逆会反转放缩和旋转共轭只反转旋转,包括 {1,h}\{1, h\}{1,h} 和虚空间右乘只反转虚空间旋转四元数旋转对于四元数表示的旋转,我们要旋转的目标向量是实部为 000,在 ijkijkijk 空间上的向量 uuu

但我们遇到一个难题:左乘一个单位四元数 q=cos⁡θ+hsin⁡θq=\cos\theta+h\sin\thetaq=cosθ+hsinθ,确实包含了我们想要的旋转,但它还包含了一个 {1,h}\{1, h\}{1,h} 上的旋转,这将向量带离了虚空间

但我们只想旋转三维向量部分,需要其实部保持为 000。如何才能将其效果锁定在三维空间呢?

我们右乘一个逆,这产生了另一个相反的双旋转,在 {1,h}\{1, h\}{1,h} 上反向而刚好抵消,在虚空间上的旋转负负得正,二倍了原本的旋转

于是我们得到了纯的旋转,这就是四元数的旋转公式

quq−1,q=cosθ+hsinθquq^{-1}, q=cos\theta+hsin\theta quq−1,q=cosθ+hsinθ

表示让 uuu 绕 hhh 按右手定则旋转 2θ2\theta2θ

根据这个定义我们还能推出一些扩展结论

任意长度的四元数对应的旋转都相同,因为取逆抵消了放缩四元数取反对应的旋转相同,因为取反会相互抵消(负负得正)参考资料bilibili - 3Blue1Brown - 四元数的可视化bilibili - 小豆8593 - 四元数如何控制物体旋转?知乎 - lxycg - 四元数和旋转(Quaternion & rotation)

‎《水泥网APP》App
整除性测试计算器 - 免费在线数论工具