四元数笔记
四元数笔记
之前有一点复数基础,看了 3Blue1Brown 的四元数理解视频,但是还是没有完全理解四元数是怎么表示旋转的
在小豆发视频后,通过参考一篇知乎文章,加上自己的思考,终于大致理解了四元数的运作,可喜可贺可喜可贺
为此在这里把拼图大致总结一下,以表纪念
状态与作用
数字是一个状态,也能表示一个作用。能这么做的前提是有一个用单位作用表示的基准状态,在这里是 1
例如,当用一个数字去乘时
2
表示将1
放缩为原来的2倍
-1
表示将1
反转
0
表示将1
长度归零
1
本身表示什么都不做
一个数的 n次方 表示做这个动作 n 次
0次方 表明做 0 次,也就是什么都不做,所以任意数的 0次方 都是 1
-1次方 是对应操作的逆,可以还原对应操作造成的影响
复数
我们定义一个新的作用 , 让
如果 是将 反转 180 度,不妨认为, 的作用是将 旋转 90 度
我们不知道这个与实数轴垂直的方向在哪里,但是这不重要
以 作为平面直角坐标系的标准正交基,坐标 表示 作为一个向量,称为复平面
复数的线性组合
很显然的,数乘复数对应数乘向量,复数相加对应在复平面内将复数作为向量相加
因此复数可以像向量一样进行线性组合
若 都是复数, 可以分解, 也可以分解
以基的视角来看,有两个互逆运算,假设这组向量作为列向量构成矩阵
- 对一组向量进行系数为 的线性组合得到向量 ,就是以基下的坐标 绘制
- 求
- 分解 得到关于一组向量的线性组合系数 ,就是求 在这个基下的坐标
- 或 求
- 特别地,若这组基是标准正交基,可以是 求
例如,任何复数 都可以看作基向量 和 的线性组合,其中 和 就是其在该基下的坐标
当我们考虑一个作用对于全体向量的影响时,只考虑它对基的影响,就能得到它对全体向量的影响,因为全体向量都是基的线性组合
i 的作用
作用于基 时让基逆时针旋转90度,成了
因此它对于任意复数的作用是逆时针旋转90度
单位复数
纯旋转对应在单位圆上的复数 ,它将任意向量逆时针旋转
作用于 ,得到它本身,正是将 旋转 后的向量
作用于 ,等于对 (90度)旋转 后的向量
我们不用去计算复杂的式子,只要意识到复数乘法是可交换的,作用于 等价于被 作用,于是等价于在旋转 基础上再加90度
由于任何复数都是 1 和 i 的线性组合,因此这个乘法将整个复平面上的点都旋转了 。
但是它为什么能旋转?我们看看另一个角度
它对任意复数的作用可以分解为 和 ,分别对应“当前方向乘 的放缩”和“当前方向垂直方向上乘 的放缩”,而总影响是它们的组合,也就是旋转
重要的是,这个垂直方向由乘 给出,告诉了我们要往哪个方向旋转
这个统一性来自于 作用于基向量都是逆时针旋转90度,来自于 正好是 逆时针旋转90度
任意复数
可以将任意复数 的作用分解为放缩和旋转(记 )
于是可独立计算放缩和旋转,互不影响
很容易可以得出复数相乘等于分别计算其长度乘积和旋转之和
以基的视角,对基的影响就是对整个空间的影响,当我们考虑一个复数 对任意复数的影响时, 左乘原本的基 就得到了新的基
好像将原本的 拉到了 ,将 拉到了 ,而整个空间都随之变换
四元数
复数的定义并没有限定虚数单位是唯一的,可以有许多个方向都与实数轴垂直
前人的努力表明,不能仅仅通过两个虚部来构建一个满足结合律、且能恰当表示旋转的代数系统,这个问题有严格证明,但是我不清楚也不关心这个问题
总之,当我们引入三个互相垂直的虚部 并定义它们的乘法规则,这个系统才能够完备地表达三维旋转
定义
这包含了四元数的一切性质。我们能推导出四元数满足以下运算
它不满足乘法交换律,左乘和右乘是不对称的、不可交换的
相互垂直,构成四维空间, 按照右手标架组成三维空间,将实数轴隐藏起来,这是后面我们描述旋转的基础
四元数的线性组合
对四元数进行数乘和相加与复数情况类似,这意味着我们能将四元数像向量一样进行线性组合
但由于四元数不遵循交换律,我们接下来考虑作用时默认是左乘
i/j/k 的作用
由定义很容易看出 对几个基的作用,于是左乘 带来了如下的影响
- 在 平面内,按照 旋转(90 度)
- 在 空间内与 相垂直平面内,按照右手定则旋转(90 度)
任意四元数都能投影分解到这两个平面,并受到对应的影响
就像复平面的单位圆旋转有一个方向 ,四维空间的单位超球面旋转有3个方向
单位向量
显然整个 空间都与 垂直。容易证明, 单位球面上任意一点 都有
作用于 得到 ,左乘 带来了如下影响
- 在 平面内,按照 旋转(90 度)
第二个性质不是那么好证
- 在 空间内与 相垂直平面内,按照右手定则旋转(90 度)
我们证明一个更大的结论:
空间内的两个向量相乘,结果可以分解为实数加 空间内一点:
- 在实数轴上是向量点乘的相反数
- 在 空间内是向量叉乘
因此 ,因为单位向量与自己点乘为 ,叉乘为
作用于 空间内与 相垂直平面的基 ,得到的点乘为 ,叉乘满足右手定则于是旋转90度,证明了结论。
这定义了单位超球面往任意一个方向 旋转90度对应的作用
单位四元数
于是我们可以定义单位超球面上的四元数
这定义了单位超球面往任意一个方向 旋转 对应的作用
- 在 平面内,按照 旋转
- 在 空间内与 相垂直平面内,按照右手定则旋转
任意四元数都能投影分解到这两个平面,并受到对应的影响
表现就是,一方面在 空间内绕 旋转,另一方面关于 在虚实之间旋转,影响实部和 方向虚部的比例
这就是四维双旋转
球极投影
我们需要将四元数应用于旋转,其放缩作用是多余的。因此只考虑单位超球面,它的维度是3,而可以映射到三维空间内
3Blue1Brown 使用了一种形象的方式进行这个映射,以帮助理解四维双旋转
怎么做呢?将四维空间想象成三维的,竖轴是实数轴,“水平面”对应目标空间,那么四维超球面对应“单位球面”,目标空间内单位球面对应“平面”上“单位圆”,正上方是 ,正下方是 ,怎么将“单位球面”投影到“水平面”上实现这样的目的呢:
单位球面与 空间的单位球面相同, 映射到原点, 映射到无穷远处,三维空间一点可以表示单位超球面上的任意四元数(除外)
这样:连接 与超球面上的四元数,这个连线(以及其延长线)与“平面”的交点就是其投影位置,这就是 3Blue1Brown 所使用的投影方式
不在这个投影空间内,原点是 表示不变,而空间中任意一点与原点的距离都相等,就像一个开了 度广角的屏幕,只是这个屏幕是三维空间
注意到,你从 看向 ,单位球面的位置与你的视线垂直
空间内的点与 对应, 在单位球面上,只有这个位置没有任何扭曲,向内对应前半球延伸到原点 ,而向外对应后半球延伸到无穷远处
的作用是对一个四维超球的刚体旋转,其球面的旋转有三个自由度,从原点指向外面所有方向
当 作用于整个空间,相当于四维超球面向着一个唯一方向 进行了一个整体旋转, 移动到 ,投影空间内所有点都会跟着变化
很显然离原点的距离与旋转程度正相关(准确来说距离 )。且关于原点对称的点互为逆
6个点标注了三维球面的旋转,而加上原点和无穷远点,8个点标注了四维超球面的旋转
3个相互垂直的圆划分了三维球面,在二维被投影为三个相互垂直的直线和圆,在四维超球面这里被投影为四个相互垂直的球面和平面
如同三维球绕旋转轴旋转,交球面于两点,这两点不动;四维球绕 空间内与 垂直的“旋转面”旋转,交超球面于一个圆,不同的是这个圆是一起旋转的
可以看到原点和无穷远点与单位球面垂直,单位球面上的点与其过原点的法平面垂直,当其向外移动时,会从原点“拉扯”这个平面,以其法平面与球面相交的圆为界,内部被拉扯而外部远离,当其移动到无穷远点时便重新拉扯到了单位球面
任意四元数
就像任意复数分解到实数轴和虚数轴一样,我们可以将任意四元数分解为标量和向量,即 ,其中 为方向(单位向量), 为长度
更一般地,可以将任意四元数 的作用分解为放缩和旋转
由于数乘和四元数总是可交换的,于是可以将数乘都放到一起计算,这也验证了四元数乘法模长守恒
取反、共轭、逆、右乘
关于如何取反,有几个容易混淆的操作需要区分
相反数
完全取反意味着相反数,这是最直观的取反()
我们将取反也视为一个作用,相反数与原四元数数在四维空间关于原点对称,那么其作用结果相比原作用结果也在四维空间关于原点对称
实部会反向,虚部也会反向,于是 旋转和虚空间旋转都在原来的基础上增加180度
另外,可以注意到取反与四元数是可交换的,先取反再作用与先作用再取反等价
共轭
只取反虚部被定义为共轭()
四元数与其共轭在 空间内的分量关于原点对称
共轭不改变角度大小,具体来说,意味着角度取反
于是对于单位四元数(纯旋转)有:
而对于一般四元数,只是将旋转取逆,而放缩不变,因此
逆
四元数的逆意味着能还原它造成的影响()
不仅反向旋转,也反向放缩
即
于是
便得到了
右乘
由 对虚部的作用可以看出:实部是点乘,满足交换律;而虚部是叉乘,交换时反号
这是唯一不遵循交换律的地方,导致了右乘 时
- 在 平面内的四元数,按照 旋转(90 度)(与左乘一致)
- 在 空间内与 相垂直平面内的四元数,按照右手定则反向旋转(90 度)
继而导致了右乘单位四元数 时
- 在 平面内的四元数,按照 旋转 (与左乘一致)
- 在 空间内与 相垂直平面内的四元数,按照右手定则反向旋转
于是便能推广到任意四元数,得到结论
右乘和左乘任意四元数的唯一区别在于,会反向虚空间内的旋转
至此,我们得到了它们的关系
- 相反数只是单纯的取反,且满足交换律
- 取逆会反转放缩和旋转
- 共轭只反转旋转,包括 和虚空间
- 右乘只反转虚空间旋转
四元数旋转
对于四元数表示的旋转,我们要旋转的目标向量是实部为 ,在 空间上的向量
但我们遇到一个难题:左乘一个单位四元数 ,确实包含了我们想要的旋转,但它还包含了一个 上的旋转,这将向量带离了虚空间
但我们只想旋转三维向量部分,需要其实部保持为 。如何才能将其效果锁定在三维空间呢?
我们右乘一个逆,这产生了另一个相反的双旋转,在 上反向而刚好抵消,在虚空间上的旋转负负得正,二倍了原本的旋转
于是我们得到了纯的旋转,这就是四元数的旋转公式
表示让 绕 按右手定则旋转
根据这个定义我们还能推出一些扩展结论
- 任意长度的四元数对应的旋转都相同,因为取逆抵消了放缩
- 四元数取反对应的旋转相同,因为取反会相互抵消(负负得正)