四元数笔记之前有一点复数基础,看了 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θzerw+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)(iiq1u1+jjq2u2+kkq3u3)+(jkq2u3+kjq3u2)+(ikq1u3+kiq3u1)+(ijq1u2+jiq2u1)−(q1u1+q2u2+q3u3)+iq2u2q3u3−jq1u1q3u3+kq1u1q2u2−(q1u1+q2u2+q3u3)+iq1u1jq2u2kq3u3
因此 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)