四元数学习总结(1)

导语:相比矩阵,用四元数处理3D旋转的优势是毋庸置疑的,但由于概念复杂,难于理解,一直令我摸不着头脑。最近学习更是发现在机器人、无人机、SLAM等先进领域,四元数被当成实数、整数这样的基础,所以决定努力补一补这块的知识点。全部内容都来自B站/知乎上的大佬们,这只是本人学习有所感悟后,梳理出来的总结。

一、四元数是如何诞生的?

可能四元数的由来大家都看过很多遍。四元数(Quaternions),是由爱尔兰数学家哈密顿(William Rowan Hamilton,1805-1865)提出的,他最初的想法是:即然在实数上再扩展一个虚数,就能表示二维平面上所有的点,那么再扩展一个虚数是不是就可以表示三维空间上所有的点?这个想法简单写下来就是这样:z = a + b·i + c·j

但是用这个(三元数)方式去表示三维坐标,那么相乘的结果会得出一项  i · j ,两个不同维度的相乘是多少?如果 i · j 直接等于 -1,那么  i · i = -1, j · j = -1,那岂不是 i = j?

就上面这个问题,哈密顿思考了很久。有一天这位学者行走在大桥上,看着过往船只,突然灵光一闪,两个虚数不够,那就再多加一个!他立刻在桥边石碑上洋洋洒洒刻上几行大字,四元数就此诞生!

z = a + b·i + c·j + d·k

i ² = j ² = k ² = i·j·k = -1 

===============================片段分割线===============================

二、如何理解四元数映射到三维空间?

那么为什么是四元数呢,该如何理解四元数呢?我们注意它的唯一约束:

i ² = j ² = k ² = i·j·k = -1 

如何理解这组约束呢?一开始我不理解四元数的时候,只有死记硬背这 i·j·k = -1 ,前三个i ² = j ² = k ² = -1 这部分会被当成原来的虚数的概念去理解记忆。但其实四元数的关键就在于 ijk 如何通过 -1 与 i ² = j ² = k ²相关联

因为 i·j·k = -1,两边左乘一个 i,得 i ² ·j·k = -i,即-1·j·k = -i,即 j·k = i

同理可推:

i · j = k ,两边左乘 i,推得 -j =  i · k

j · k = i ,两边左乘 j,推得 -k = j · i

k · i = j ,两边左乘 k,推得 -i = k · j

上面的这些推导公式说明什么?暂时不能说明什么,因为还需要“上帝”来指引我们

e^ i·π = -1

没错,就是欧拉恒等式,它代表什么?它所表达的意思就是:如果我们在一个数字上乘以-1,实际上把这个数字在实轴上旋转了180°(想想实轴上的数字1,旋转π后,是不是停留在-1的位置上)那么如果不是旋转180°呢?那也没问题,把公式中的π换成θ,就可以得出数学历史上最著名的欧拉公式。

e^ i·θ = cos(θ) + i sin(θ)

欧拉公式很好的应用于二维平面上的旋转,那自然就会有人想:有没有可能用欧拉公式来表示三维空间的旋转呢?那么就要思考,在三维空间里的虚数是什么样子的?如果能找到一个三维空间的虚数,再应用于欧拉公式上不就可以了?

欸!三维虚数,是不是四元数里的三个虚部?还真没错,三维空间里的虚数 I₃ 如下表示:

 I₃ = a·i + b·j + c·k

三维欧拉公式

e^ i·θ = cos(θ) + sin(θ)·( a·i + b·j + c·k)

i ² = j ² = k ² = i·j·k = -1 

其中三维虚数还是满足 i ² = j ² = k ² = i·j·k = -1 这一组约束,也就是满足i · j = k那一组推导公式。三维虚数可以直接用三维的xyz坐标系去一一对应。那和原来的三维坐标系欧拉角又有什么不一样呢?关键来了:当上述约束的ijk映射三维坐标系的xyz轴,那么整个坐标系就自带旋转的属性了。如何理解这话?因为虚数的乘法对应几何就是旋转!秘密就在于上面(i · j = k)那六个推导公式。如下图所示,沿着 i 逆时针旋转90°就是 -k 了,即  j · i = -k,此时终于搞清楚了上述约束&推导式的伟大之处!

那如果不是90°的旋转呢?套用欧拉公式呗。比如现在要单位矢量 在ij轴所构成的平面上,沿着k轴旋转,如下图所示。那我们就可以利用欧拉公式:j · e^ k·θ

 j · e^ k·θ

= j · (cos(θ) + k · sin(θ))

= cos(θ) · j + sin(θ) · i

我们继续深入,上面的举例还是简单,因为旋转的只是一个单一的单位方向向量,正常情况都是三维表示法,也就是上面的 j 替换成 (i+j+k) 那会怎样呢?

 (i+j+k) · e^ k·θ

=  (i+j+k) · (cos(θ) + k · sin(θ))

= i·cos(θ) + i·k·sin(θ) + j·cos(θ) + j·k·sin(θ) + k·cons(θ) + k·k·sin(θ)

= (cos(θ)+sin(θ))·i + (cos(θ)-sin(θ))·j + cos(θ)·k - sin(θ)

注意运算的结果,出现了一项不带任何维度矢量的实数项,我比较菜,不理解这一项的关键点,但是在那些大数学家看来,这是一个非常危险的项啊!想想在一个三维空间上多出了一项值,它并不在这三维空间上的任意维度上,那它表示什么,第四维?暂时按下不表,接着往下。

===============================片段分割线===============================

三、几何层面的四元数。

经过上一节的概述,我们可以理解到四元数的性质非常有利于表达三维空间的旋转,所以了解四元数的性质要先于了解四元数在旋转中的应用。所以前两节的内容主要是阐述复数与四元数之间的关系,在深入探讨四元数的内核前,我觉得有必要先搞明白以下几个比较抽象的概念。

  • 空间中的子空间:一般而言,空间(维度>2)都存在更低维的子空间,比如二维空间中一维子空间,也就是直线;三维空间中的一维子空间和二维子空间,也就是直线和面。当超过三维的概念我们就很难去想象是什么样子,但四维空间一定会存在三维子空间或二维子空间。我们这里会加一个前缀超(hyper)来形容这些空间,比如高维空间中的平面我们称为超平面。
  • 空间和子空间的映射:我们将二维空间表示为(x,y),当y=0时,其实可以看成是一维的,只不过它表示成(x,0)这种形式。推到四维,(w,x,y,z),当w=0时,(0,x,y,z)就是一个三维子空间,这也是为什么我们可以用单位四元数对三维向量进行操作,其实我们是将三维向量映射到四维的三维子空间(w=0,这种形式也成纯四元数),然后对其进行旋转,最终得到的向量结果依然是这个三维子空间中的,因而可以映射回三维空间。
  • 广义球:这里的球是广义上的。我们在二维平面上,广义球其实指代circle,三维空间上就是我们认知上的球,称为two-sphere,而四维空间中广义球其实是一个超球(hyper-sphere),又称为three-sphere。
  • 约束与特征向量:空间中的一点由x, y, z等参数来表示,一般来说参数的数量与维数相等,二维空间的点用{x, y}参数,四维空间的点用{x, y, z, w}参数。但是对于空间的点加以约束,则该会减少参数的数量,比如三维空间的点在某一单位球面上,原本三个参数{x, y, z}才能表达的点现在只需要两个参数{u, v}就可以表达。如果{u, v}是单位向量,也可以称{u, v}是{x, y, z}的特征向量。

上述概念给了大家一个思路,四元数这样一个东西并不是一蹴而就的,从空间来说,它与我们熟知的低维空间本质上是没有区别的,或者说是有很大共性的。四元数的很多特性都是从低维拓展而来的,更具体的说是从复数这一概念拓展的。

结合第二节内容,现在可以归纳总结出以下四元数的特性:

  1. 单位四元数是四维空间中一个超球上面的点,满足w²+x²+y²+z²=1;而纯四元数是四维空间在w=0时的一个子空间的点,形式为{0, q},特别注意的是纯四元数与四元数是不同的概念。再展开来说:
    1.1:单位四元数(Unit Quaternion)是一个四元数,其模(或称为范数)等于1。四元数通常用于表示三维空间中的旋转角度,它可以避免万向锁问题,并且能提供平滑的插值方法。
    1.2:纯四元数(Pure Quaternion)是四元数的一个子集,它的实部为0,即其一般形式可以表示为 Q = 0 + xi + yj + zk = {0, q},其中 x、y、z 是实数,而 i、j、k 是四元数的虚部单位。纯四元数在几何上可以被视为三维空间中的向量,其中 x、y、z 分别代表向量的三个分量。
  2. 四元数是复数虚部扩展的结果,复数的虚部为1个,而四元数虚部有3个,且两两互相正交,其中实部是cosθ/2,而虚部为一个単位轴乘以sinθ/2。
  3. 四元数自由度并没有四个维度,由于存在w²+x²+y²+z²=1这个约束,它的自由度其实只有3,且每个四元数可以对应一个特征向量,即n。但请记住四元数并不是与特征向量一一对应的,后文会有说。

这里先举个例子,三维的球用代数表示为x²+y²+z²=1,虽然球上面的点是由x,y,z三个参数来确定,但实际上我们只需要两个。假设取x和z表示,其中y可以通过x和z进行求解。那么,我们将y轴信息给隐去,只看投影平面,如下图所示。这张图的意思是,整个球在XOZ平面上投影是一个圆,当球面一点投影在圆上时,y=0;投影的位置位于圆内时,则分别两种情况,y>0处于北半球,y<0处于南半球。所以我们仅通过投影后的圆即可还原出整个球体。

让我们推广到四维,w²+x²+y²+z²=1中取x、y和z来表示超球。如下图所示,四维空间投影到三维超平面(w=0)可能是一个two-sphere。当投影点在整个two-sphere的边缘时,w一定为0,值得一提的是在这个空间内的四元数是一个纯四元数。当投影点落在two-sphere的内部时,也分为两种情况,w>0和w<0。但是我们可以发现这两种情况下对应的特征向量是一样的,所以我们将旋转矩阵向四元数转换时,是有两个对应值的,四元数的范围是2倍覆盖于3D旋转(2:1 mapping)。上面写的相对来说比较隐晦,但我觉得可以对理解四维空间和四元数相当有帮助。本文表述能力有限,如果实在看不懂的,可以翻阅《Visualizing Quaternions》第八章,个人觉得这是书中最为精彩的部分之一。

现在回头看第二节最后例子,我们甚至可以推广到任意三维向量绕任意轴进行旋转的基本通式:

三维任意向量:Q = 0 + xi + yj + zk = {0, q}

旋转轴:P = w + xi + yj + zk = {s, p}
即: {0, q} · e^{s, p}θ

但此时发现,三维虚数版本的欧拉公式适应不了单位四元数的运算,那要如何处理呢?请看下一篇详细探讨四元数的乘法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/642255.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

详解CSS(一)

目录 1.CSS是什么 2.基本语法规范 3.引入方式 3.1内部样式表 3.2行内样式表 3.3外部样式表 4.选择器 4.1基础选择器 4.1.1标签选择器 4.1.2类选择器 4.1.3id选择器 4.1.4通配符选择器 4.2复合选择器 4.2.1后代选择器 4.2.2子选择器 4.2.3并集选择器 4.2.4伪类选择…

虚拟化技术[3]之网络虚拟化

网络虚拟化 网络虚拟化简介核心层网络虚拟化接入层网络虚拟化虚拟机网络虚拟化案例: VMware网络虚拟化技术虚拟网络接口卡虚拟交换机vSwitch分布式交换机端口组VLAN 网络虚拟化简介 传统的数据中心&#xff1a;服务器之间操作系统和上层软件异构、接口与数据格式不统一&#x…

@JsonFormat注解出现日期序列化以及反序列化问题(日期比实际日期少一天)

文章目录 前言一、场景如下所示二、问题分析三、JsonFormat注解是什么以下是 JsonFormat 注解的一些常用属性&#xff1a; 四、解决问题解决方式&#xff1a;只需要指定对应的时区就好效果如下&#xff1a; 五、JsonFormat 注解时出现日期问题总结 前言 在一次的偶然机会下发现…

二进制中1的个数c++

题目描述 计算鸭给定一个十进制非负整数 NN&#xff0c;求其对应 22 进制数中 11 的个数。 输入 输入包含一行&#xff0c;包含一个非负整数 NN。(N < 10^9) 输出 输出一行&#xff0c;包含一个整数&#xff0c;表示 NN 的 22 进制表示中 11 的个数。 样例输入 100 …

【算法题】520 钻石争霸赛 2024 全解析

都是自己写的代码&#xff0c;发现自己的问题是做题速度还是不够快 520-1 爱之恒久远 在 520 这个特殊的日子里&#xff0c;请你直接在屏幕上输出&#xff1a;Forever and always。 输入格式&#xff1a; 本题没有输入。 输出格式&#xff1a; 在一行中输出 Forever and always…

Ubuntu 如何根据NVIDIA显卡型号确定对应的显卡驱动版本并安装

目录 一、查询推荐安装的驱动版本 二、安装推荐版本的驱动 1. 通过终端安装&#xff0c;只安装 nvidia 驱动&#xff08;亲测可用&#xff01;&#xff09; 2. 通过 software & Updates 安装&#xff0c;安装 nvidia 驱动。 三、查询能安装的最新的显卡驱动版本 1. 方…

洛谷P3574 [POI2014] FAR-FarmCraft(树形dp)

洛谷 P 3574 [ P O I 2014 ] F A R − F a r m C r a f t &#xff08;树形 d p &#xff09; \Huge{洛谷P3574 [POI2014] FAR-FarmCraft&#xff08;树形dp&#xff09;} 洛谷P3574[POI2014]FAR−FarmCraft&#xff08;树形dp&#xff09; 文章目录 题意题目说明 思路标程 题目…

『Stable Diffusion 』AI绘画,不会写提示词怎么办?

提示词 有没有想过&#xff0c;为什么你用 SD 生成的猫是长这样的。 而其他人可以生成这样的猫。 虽然生成的都是猫&#xff0c;但猫与猫之间还是有差距的。 如果你的提示词只是“cat”&#xff0c;那大概率就会出现本文第一张图的那个效果。而如果你加上一些形容词&#xff…

如何选择一款安全高效的数据自动同步工具?

随着科技的不断发展&#xff0c;企业处理的数据量愈发庞大。数字化浪潮的涌现使得数据在业务活动和决策中的角色变得日益重要&#xff0c;然而这些数据往往分布在不同的位置&#xff0c;需要进行同步和分类&#xff0c;以便更有效地利用。以下是一些常见的数据自动同步场景&…

【Linux安全】iptables防火墙(二)

目录 一.iptables规则的保存 1.保存规则 2.还原规则 3.保存为默认规则 二.SNAT的策略及应用 1.SNAT策略的典型应用环境 2.SNAT策略的原理 2.1.未进行SNAT转换后的情况 2.2.进行SNAT转换后的情况 3.SNAT策略的应用 3.1.前提条件 3.2.实现方法 三.DNAT策略及应用 1…

QT教程-一,初识QT

目录 一,QT是什么&#xff1f;能够使用它做什么&#xff1f; 二&#xff0c;Qt 能够使用的语言 三&#xff0c;Qt主要用于什么领域&#xff1f; 四&#xff0c;Qt开发的软件 一,QT是什么&#xff1f;能够使用它做什么&#xff1f; Qt是一个跨平台的 C 开发库&#xff0c;主…

9.2 Go语言入门(包和导入)

Go语言入门&#xff08;包和导入&#xff09; 目录一、包和导入1. 包&#xff08;Package&#xff09;1.1 包的定义1.2 包的作用1.3 main 包1.4 非 main 包 2. 导入&#xff08;Import&#xff09;2.1 导入标准库2.2 导入第三方包2.3 导入本地包2.4 导入别名2.5 导入并调用初始…

【C语言】整型提升与char取值范围

整型提升介绍 C语言中整型算术运算总是至少以缺省&#xff08;默认&#xff09;整型类型的精度来进行的。为了获得这个精度&#xff0c;表达式中字符、短整型操作数在使用前被转换为普通整型。而这个过程是悄悄发生的。 整型提升的意义&#xff1a; 表达式的整型运算要在CPU…

二叉树—先后序线索化和先后序线索遍历

有了上篇文章的基础&#xff0c;先序和后序的线索化逻辑一样。 代码如下&#xff1a; void preOrderThreadTree(TreeNode* T,TreeNode** pre) {if (T NULL) {;}else {//printf("%c ", T->val);if (T->lchild NULL) {T->ltag 1;T->lchild *pre;}if …

逻辑这回事(一)----编码规范

说明&#xff1a;优先级是M的规则为强制项&#xff0c;优先级为R的规则为建议项。 通用约束 应有全局观念。 优先级&#xff1a;M 说明&#xff1a;你所编写的代码在成为最终硅片上的一部分之前&#xff0c;需要经过许多设计者利用各种各样的工具进行各种各样的处理。有时&…

【知识拓展】ngrok-高性价比的内网穿透工具

前言 使用google colab运行的web应用无法打开进行测试。 第一时间想到是否有相关工具能将内网映射到外网供访问。于是找到了ngrok。 ngrok 是什么&#xff0c;我们为什么要使用它&#xff1f; ngrok官网是一个全球分布的反向代理&#xff0c;无论您在哪里运行&#xff0c;它…

VUE3和VUE2

VUE3和VUE2 上一篇文章中&#xff0c;我们对VUE3进行了一个初步的认识了解&#xff0c;本篇文章我们来进一步学习一下&#xff0c;顺便看一下VUE2的写法VUE3是否能做到兼容&#x1f600;。 一、新建组件 我们在components中新建一个组件&#xff0c;名称为Peron&#xff0c;…

yolov10 快速使用及训练

参考: https://docs.ultralytics.com/models/yolov10/ ultralytics其实大多数系列都能加载使用: 官方: https://github.com/THU-MIG/yolov10.git 代码参考: https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/train-yolov10-object-…

无人机的相关基础知识(看不懂了 待定以后继续补充)

视频&#xff1a; 【浙江大学】浙大博导带你从0制作无人机_哔哩哔哩_bilibili 什么是无人飞行器 无人机自主导航构架 IMU&#xff08;加速度计和陀螺仪&#xff09;&#xff0c;可以测出当前的 加速度和角速度 这俩信息再去融合外部传感器 &#xff08;例如视觉传感器或者雷…