归途如稽

V1

2022/10/27阅读:30主题:凝夜紫

? 大一新生也能明白四元数, 这是可以说的吗

四元数基础—低配无伤速通

1. 概述

四元数是基于复数的推广, 虽然说是四维空间的数, 但是在物理上基本都被用于描述三维的事物, 其中最重要的且实用的功能莫过于描述三维转动和刚体的姿态了. 你可能说 “这个我知道! 欧拉角跟Rodrigues矩阵么, 大惊小怪的”, 然后认为四元数终归也只是数学家捣鼓的玩具而已, 完全可以被代替——实际上不是. 在3D引擎和计算机图形处理领域, 四元数在描述姿态和旋转的便捷性是无可替代的 (毕竟只用四个参数就可以描述状态和变换), 而且不会出现用欧拉角描述时的 “万向锁死” 现象. 更重要的是, 四元数理论正是物理学里面四维矢量的基础! 所以, 出于对理论框架的完整性的尊重, 我们作为萌新也可以对这个抽象的东西做一些初步的了解

在我们成功用复数 (即 ) 描述平面运动后, 一个自然的诉求就是用同样的方式解析地描述空间运动, 很自然地我们想到了去定义所谓 “三元数”. 但是很不幸的是, 所谓 “三元数” 的定义无法满足一类作为 “数” 所具有的, 通俗的说, 某种 “完备性”, 因而一种伟大的做法是用恰好自洽的四元数的三维投影去描述三维空间的事物. 只不过, 这种方法很快迎来直接的问题:

  • 三次元的人类如何理解四次元的几何? 或者说, 我们如何从四次元的关键信息中获取对理解三维有用的部分?
  • 我们怎么始终保证数学上在四维空间天马行空的运算结果能时刻体现在三维超 (hyper) 平面上?

在下面的内容中, 我们都默认以单位四元数为说明对象, 它们代表四维超球 上的点, 这在数学上是很自然的. 因为对于任意模长 (很自然就可以理解的推广) 的四元数, 就相当于对应的单位四元数作伸缩变换. 实际上, 在后面也有其它原因的说明


2. 四元数的基本概念

定义

在实际定义中, 四元数是基于复数的延伸, 只不过这里我们把 “虚部” 由 换成 , 定义

任意一个四元数可以表示为

其中 称之为标部, 称之为矢部. 而 之间的相互运算类似于叉乘的关系, 但还是有细微区别的. 实部为 的四元数称为纯四元数, 不过很有趣的, 在那个向量概念尚未明确的时代, 纯四元数最初就被它的发现者命名为 “vector” (笑).

运算规律

  1. 四元数仍然满足线性运算的所有规律. 只不过唯一一个值得注意的地方是, 四元数乘法也没有交换律, 这一点跟矩阵很相似, 既然四元数也能和矩阵一样表示有限转动, 那么也侧面印证了有限转动的非对易性吧

  2. 四元数的乘法

    假设我们有四元数 则根据定义的方式逐项计算, 有:

    关于四元数没有交换律可以自行验证

    然后可以得到纯四元数的乘积

    以及很容易有的推论

    值得一提的是, 上述四元数最后一种表示方式称为二元表示方式, 形式跟复数很像. 里面的基矢 对应了复数单位 , 很容易验证, 对于基矢同样有

    其实在这里就给大家提出一个注意, 要随时注意参与运算的矢量是参与的 “矢量运算” 还是 “四元数运算”. 上式中, 左侧是四元数运算, 中间是矢量运算

  3. 四元数的逆, 共轭与模

    四元数 的逆记作 , 满足

    四元数的共轭 是标部不变, 矢部符号相反后的结果

    因为我们的研究对象是单位四元数, 所以我们其实很容易发现四元数的共轭同时也是逆, 即 ; 如果不是单位四元数, 就整体除以四元数的模进行标准化. 相应标准化四元数的模 定义为

  4. 四元数表示三重积

    这个公式可以从上面矢量乘积的四元数表示得到

    • 标量三重积

    • 矢量三重积

  5. 四元数指数与旋转

    首先放一个公式, 跟欧拉公式特别相似所以容易记忆:

    从复数联想, 这个式子有没有 “在四元数之间的旋转变换” 的含义? 下面举一个例子

    设两个矢量模长相等 , 而 可以转 角度到 , 转轴 的方向由右手定则确定, 则

    两侧同时右乘四元数 , 有

    确实也有表示旋转的意义, 只不过注意, 这里转动前后的矢量都是垂直于转轴的, 强调这点的原因在后面解释

最后开一开脑洞, 四元数以上其实也有八元数, 十六元数, 只不过往上面的元越多, 越需要舍弃一些进行运算时我们习以为常的运算律, 先是乘法交换律, 然后是结合律, 等等, 所以后面对于我们目前用处不大 (其实是根本没用了)


3. 球极投影—四元数的可视化

我们最终要让四元数向三维超平面投影以实现部分的可视化, 而其中我们用什么样的方式让它可视化, 决定了我们可以怎样等效的利用这一可视化的部分为三维的问题服务, 就像我们已知三维的旋转变换, 就把它投影到二维平面上得到二维旋转变换一样

但毕竟三维投影到二维跟四维投影到三维不一样, 我们生活在三维, 我们实际上明白投影前后一个图形的变化, 并且可以在大脑中已经建立好的三维环境从投影复原真实的立体图像—但是我们没有人见过四维空间, 也无法建立四维环境框架渲染真实图像, 所谓通过投影的理解就是一种很微妙的欺骗大脑的过程, 也即自我暗示 “我想象出来它的样子了”

如果接受低维之间的关系形而上学, 我们很自然的想到用类似 “截面还原” 的想法 “看见” 四维物体, 即得到高维物体经过三维面每一时刻三维截面的形状之后, 沿那个无法想象的方向拼接而成. 不过那种方法是工程师们喜欢干的 (笑), 实际上对我们全面地获得对一个图形的全览并无帮助

这里给大家推荐两段视频, 是著名数学科普博主 @3Blue1Brown 关于四元数可视化的解说, 以及四元数模拟转动的互动视频, 强烈建议认真看完之后继续阅读下面内容

四元数的可视化

四元数模拟的互动视频 (需要啃一下生肉)

这里对视频主要思想进行总结:

  • 投影的方式是 “球极投影”, 使得高维单位球体与低维的全空间建立一一映射关系
  • 通过乘以某个超复数实现对高维球的旋转, 可以看做从实轴上 的对应点带动全坐标空间以及其中的物体旋转伸缩到此复数对应的点. 在相应在低维的投影变化中, 我们要提取有用信息来描述低维的旋转变换
  • 投影之后形状不会发生畸变的部分, 永远是矢部模长为 的点, 即所谓 “平直部分”, 或者说是超球的赤道, 上面的点代表着单位矢量, 可以为我们所用
  • 高维实轴上的 永远映射到低维坐标原点, 而在四维超球向三维投影时, 由于三个方向全被虚轴占用, 实轴只有一个 投影到了三维空间
  • 四维单位超球面映射到三维全空间. 单位球面上的点是纯四元数, 事实上就可以等效的看作三维的位矢 (这也是最初把纯四元数叫做 “vector”的考虑); 球面内部的点实部在 之间; 球面外部的点实部在 之间
  • 四元数相当于一种变换, 乘一个单位四元数相当于做一个四维空间里的纯旋转, 但是会投影成两个方向垂直同时发生的二维旋转. 各种三维投影圆之间的运动特点遵循的是左手还是右手关系取决于左乘还是右乘

4. 四元数表示三维转动

先放算法

对于一个点 , 绕轴 按右手关系转角度 到新的点 , 定义初末位置的纯四元数:

以及表示转角的单位四元数:

则有

  • 证明:

    分解成平行和垂直于 的分量 , 平行部分旋转过程中不变, 垂直部分发生转动

    (我们之所以一直强调对 “对垂直分量” 进行旋转, 是因为这样乘上表示旋转的指数, 计算结果中标部由于矢量与转轴垂直, 一直为零, 从而保证结果是纯四元数)

    旋转之后,

    我们观察等式右侧的形式, 这应该是左右侧都乘过一个四元数的形式, 用待定系数法, 设

    解得 , , ,

    也就得到我们求证的形式

怎么理解

实际上这就是个按部就班计算的数学结论, 没有什么所谓灵感迸发或者那么多巧合的事情, 但真的想要 “牵强附会” 点东西也是可以的, 就是说, 我们到底怎么理解这种旋转的操作, 不是直接左乘或者右乘一个 而是两边各自乘了 , 貌似可以这么看:

首先我们的证明过程是基于已知事实 (可以自己验证) : 旋转矢量垂直于旋转轴的时候, 可以直接左乘相应角度的四元数指数, 也就是说, 旋转变换对矢量垂直分量除了旋转没有其它的变换. 但是, 各位可以自行验证, 或者在上面的互动视频里试验, 矢量不垂直于旋转轴的时候, 除了垂直分量该转的转, 平行分量出现了畸变 (从数学上说, 就是结果四元数出现了不为零的标部, 使得最后结果的投影点偏离了三维的单位球面); 而如果我再右乘一个四元数的逆, 该转的部分接着转, 但是平行部分的畸变被抵消了 (或者说, 这两种情况的变换对平行部分的变换是互逆的) 矢量恢复到原来平直的形状, 合变换就是纯转动

我们先单独左乘一个四元数的时候, 四元数点偏离了纯四元数所在的三维子空间, 那么我们就要再把它变换回来. 对于旋转矩阵来说, 需要右乘的转置就是逆, 而单位四元数的逆也是是共轭, 所以乘的另外一个四元数就是共轭; 然而在两个四元数作用过程中, 旋转的部分在起同样的作用, 所以实际上要各自代入的角度是 , 因而可以 “牵强附会” 到我们现在得到的形式

与主流转动理论的印证

  1. Rodrigues矩阵

    我们将四元数分量写成列向量, 将旋转变换写成矩阵形式:

    如果将相应的元素代入, 就是原始的旋转矩阵形式

  2. 有限转动的张量表示

    我们再次用二元形式写一下四元数的转动

    这正是有限转动的张量形式

分类:

数学

标签:

数学

作者介绍

归途如稽
V1