点击“计算机视觉life”关注,置顶更快接收消息!
本文阅读时间约8分钟

四元数的可视化

四元数被广泛应用在计算机图形学领域,游戏引擎Unity也是用四元数在后端计算旋转。数学上,我们可以按部就班地进行演算,可是直觉上一直不知道它究竟如何运作的。今天我就带领大家通过观察四元数,更准确地说是观察四维单位超球面在三维的投影,来对它有个更深入的了解。

四元数的引出

四元数的一个最主要的应用就是表示旋转,它既是紧凑的,也没有奇异性。而旋转的其他表示方法各有优劣:

旋转矩阵:用九个数来表示三个自由度,矩阵中的每一列表示旋转后的单位向量方向,缺点是有冗余性,不紧凑[1]。

旋转向量:用一个旋转轴和一个旋转角来表示旋转,但是因为周期性,任何2nπ的旋转等价于没有旋转,具有奇异性[2,3]。

欧拉角:将旋转分解为三个分离的转角,常用在飞行器上,但因为万向锁问题(Gimbal Lock) 而同样具有奇异性。

四元数之所以难以理解,是因为它是一个四维的表示。不过也不是没有办法,因为我们通常用单位四元数来表示旋转,所以我们只需要关注四维中的单位超球面(unit hypersphere),然后就可以较为轻松地获得它在三维的球极平面投影(stereographic projection).

单位圆在一维空间的投影

为了更好地理解四维单位超球面在三维空间的投影, 我们先来看一看二维单位圆是怎么投影到一维空间的。

在复数平面内,对于每一个在单位圆上的点,画一条线将 -1 点与这个点相连。连线将与虚数轴交于一点,此交点就是投影点。从上图中可以看到,1 投影在一维 0 处,i 和 -i 投影后不发生变化, 而 -1 投影到了正负无穷远处。这里需要注意的是,此处的投影仅仅只是二维空间中单位圆的一个投影,二维空间中的其他点是没有办法用一维来表示的。

我们可以在左边的单位圆中清楚地观察到乘以 i 对应着一个90度的旋转,与之对应的,投影在一维坐标轴上的点也在进行着移动,1 变成 i,i 变成 -1,-1 变成 -i,-i 变成 1, 这与复数的乘法定义相吻合。就这样,二维空间中单位圆的纯旋转由一个维度表示清楚。

单位球面在二维空间的投影

现在想象我们如何将三维空间的纯旋转解释给二维的生物。首先我们需要构建一个新的坐标系,在这个坐标系中,i 轴和 j 轴形成一个平面,而实数轴与z轴对齐。

需要注意的是,这里的坐标系仅仅只是为了让概念可视化,i 和 j 并不像复数和四元数那样有良好的乘法定义。和之前的二维投影相似,我们可以用球极平面投影来描述三维的旋转。对于每一个单位球面上的点,我们都把它与 -1 点相连,这条线与 ij 平面的交点即是二维的投影点。

如上图所示,实数轴上的 1 会投影在平面的原点,北半球上的点会投影在 ij 平面的单位圆内,而南半球上的点会投影在单位圆之外,且任意方向的无穷远处都会是-1的投影。这里的单位圆是投影之后唯一不被扭曲的,位于单位球上的点。

为了方便理解,我们首先关注几条参考线。经过 -1 且与 i轴 平行的圆投影在二维平面的 i 轴上,同理,与 j 轴平行的圆投影在 j 轴上。事实上,任意一个经过 -1 的圆投影到二维平面上都会是一条直线(经过 -1 等价于直线延伸到无穷远处)。当球面在三维空间中旋转时,延 i 轴或 j 轴的旋转都会使垂直方向上投影的线变成圆形,投影的圆形变成线。延实数轴的旋转投影在二维平面上仍然是一个二维的旋转。

单位超球面在三维空间的投影

如同复数的定义,四元数由一个实数项和三个虚数项构成。对 q2 左乘一个四元数 q1,其作用是将 q2 拉伸 q1 的模长,再作用一个特殊的四维旋转。因为我们用单位四元数来表示三维空间中的旋转,所以在这里不再考虑拉伸。

对四维空间中的单位球面进行球极平面投影,实数轴的 1 投影到 ijk 坐标系的原点。如同一维中的 i, j 点,二维中的单位圆,当四维超球面投影到三维空间时,与三维空间交于一个位置不变的三维单位球面,而这个球面对应纯四元数,也就是实数部分为零。实数部分介于 0 到 1 之间的投影在了这个三维球面的里面,而实数部分小于 0 的投影在了三维球面以外,-1 投影在了各个方向的无穷远处。

正如同三维中的圆投影到二维平面中是一条线一样,四维中的球(不是超球)投影在三维是一个平面,事实上,三维投影中的平面都是四维超球中过 -1 的球面在三维的投影。

画一些参考线并观察,我们得出了整篇文章一个非常重要的结论:乘上一个单位四元数可以看成是三维空间内两个垂直且同步的二维旋转。

单位四元数乘法的可视化

讲了这么多,我们终于可以用单位四元数在三维的投影来理解四元数啦!首先是四元数的乘法。什么叫做两个垂直且同步的二维旋转呢?如下图所示,正在变化的 i 轴描述了一个二维的旋转,而 jk 平面里的圆同样描述了一个二维的旋转。对于四维空间的生物来说,他们观察到的是一个四维刚体的纯旋转,但在我们看来,只能把它分解为两个二维的旋转,它们因基坐标的定义而互相垂直,因描述同一个四维旋转而同步。

于是乎,我们可以观察到几乎所有的四元数乘法定则。左乘一个 i 相当于两个圆都转了90度,1 变成 i,i 变成 -1, j 变成 k, k 变成 -j, -j 变成 -k, -k 变成 j。

单位四元数表示三维旋转的可视化

这里简单解释一下为什么我们用 qpq’ 的方法表示三维旋转,其中 p 是表示三维空间向量的纯四元数。首先,如果待旋转的向量 p 与单位四元数虚部所表示的旋转轴正交时,我们只需要左乘单位四元数就可以表示此旋转。如下图所示,i 点绕 k 轴进行旋转,左乘单位四元数 q 即可。

可是对于大部分情况,向量 p 和旋转轴并不正交,单单只是左乘单位四元数 q 会在三维空间中有拉伸的效果。注意整个三维空间都是单位超球面的投影,这里的拉伸只不过是投影之后的一种效果罢了。我们用四元数并不关心四维单位超球面的旋转,而是拿它来描述三维空间的旋转,于是我们必须要找到一种不带拉伸效果的四元数运算。人们发现,当右乘 q 的逆时,同方向的旋转会继续进行,而拉伸的效果互相抵消,于是就有了 qpq’ 的表示方法。如果表示一个绕 u 轴 θ 度角的旋转, q 则表示为 [cos(θ/2), sin(θ/2)u].

对于详细的 qpq’ 的推导,请参考 krasjet 编写的一篇文章 [4]。最后一幅图用更多的点来描述这个道理,左乘单位四元数 q 会有拉伸效果,jk 圆逆时针旋转,右乘 q 的逆抵消了拉伸的效果,jk 圆仍然继续逆时针旋转。

结语

到这里,整个四元数的可视化就告一段落啦。在这篇文章中,我们从二维旋转在一维的投影,三维旋转在二维的投影,逐渐进阶到四维旋转在三维的投影来了解四元数。我们观察了乘法法则在三维投影中的规律,并简单解释了四元数为什么要用 qpq‘ 的形式来表示三维旋转。整片文章受 Youtuber 3B1B 的启发,强烈推荐大家戳链接访问这个可以互动的教学视频(https://eater.net/quaternions/)

参考资料

[1] 高翔,张涛,《视觉SLAM 十四讲》
[2] J. Stuelpnagel, “On the Parametrization of the Three-Dimensional Rotation Group,” 1964.
[3] F. S. Grassia, “Practical Parameterization of Rotations Using the Exponential Map,” 1998.
[4] Krasjet, “四元数与三维旋转”. https://krasjet.github.io/quaternion/quaternion.pdf
[5] https://www.youtube.com/watch?v=d4EgbgTm0Bg
[6] https://www.youtube.com/watch?v=zjMuIxRvygQ
[7] https://eater.net/quaternions/
[8] https://www.youtube.com/watch?v=zc8b2Jo7mno

推荐阅读

从零开始一起学习SLAM | 为什么要学SLAM?
从零开始一起学习SLAM | 学习SLAM到底需要学什么?
从零开始一起学习SLAM | SLAM有什么用?
从零开始一起学习SLAM | C++新特性要不要学?
从零开始一起学习SLAM | 为什么要用齐次坐标?
从零开始一起学习SLAM | 三维空间刚体的旋转
从零开始一起学习SLAM | 为啥需要李群与李代数?
从零开始一起学习SLAM | 相机成像模型
从零开始一起学习SLAM | 不推公式,如何真正理解对极约束?
从零开始一起学习SLAM | 神奇的单应矩阵
从零开始一起学习SLAM | 你好,点云
从零开始一起学习SLAM | 给点云加个滤网
从零开始一起学习SLAM | 点云平滑法线估计
零基础小白,如何入门计算机视觉?
SLAM领域牛人、牛实验室、牛研究成果梳理
我用MATLAB撸了一个2D LiDAR SLAM
可视化理解四元数,愿你不再掉头发https://mp.weixin.qq.com/s?__biz=MzIxOTczOTM4NA==&mid=2247485009&idx=2&sn=3709bcff8efb4a3d1ff78fbb60d4f245&chksm=97d7e3c6a0a06ad07bfcebd0e17a9d58c821ddfc2016dc4b8914bc0c921d65b59243ed5efcc9&scene=21#wechat_redirect)

“欢迎关注公众号:计算机视觉life,一起探索计算机视觉新世界~”

可视化理解四元数,愿你不再掉头发相关推荐

  1. Understanding Quaternions 中文翻译《理解四元数》

    Tags: math, quaternion 原文地址:http://www.3dgep.com/understanding-quaternions/ 正文 在这篇文章中我会尝试用简单的方式去解释四元 ...

  2. 四元数左乘右乘_理解四元数

    Understanding Quaternions 中文翻译<理解四元数> 正文 在这篇文章中我会尝试用简单的方式去解释四元数的概念,即用可视化的方式解释四元数以及几种对四元数的操作.我将 ...

  3. SIGIR阿里论文 | 可视化理解深度神经网络CTR预估模型

    小叽导读:尽管业界对于图像处理和自然语言处理领域,在算法可解释性方向上已经取得了一些进展,但对于电商与广告领域,目前还是空白.另一方面,深度学习技术已经开始被大规模应用到广告业务中.广告是很多互联网现 ...

  4. 球谐函数的概念与应用:可视化理解傅里叶级数

    球谐函数的概念与应用:可视化理解傅里叶级数 傅里叶级数 在谈及球谐函数时,从傅里叶级数开始理解,会有非常好的体验.从球谐函数的定义出发:球面函数可以分解为无限个球谐函数的累加.阶数越高,逼近的效果越好 ...

  5. 除了加班、掉头发,程序员还在承受些什么?

    转自:除了加班.掉头发,程序员还在承受些什么?

  6. 男人为什么容易掉头发?

    男人为什么容易掉头发? 治疗脱发的传统药物中名气最大.使用最多的是何首乌,最值得警惕的也是何首乌.按唐朝李翱说法,这种药物是一个姓何名首乌的唐朝人发现的,吃了不仅延年益寿而且生了一大堆子女,引起轰动, ...

  7. 学计算机头发变白了,掉头发,头发变白可不是小事!该如何调理?

    关注后查看更多往期精彩文章掉头发证明肾脾虚弱,头发变白是血虚的症状--头发中暗藏着许多健康密码.今天我们就来认识一下我们的头发,告诉你头发的功能.常见疾病,并分析各种头发问题与我们身体健康的关系,让你 ...

  8. 学计算机的人掉头发吗,高校里容易“掉头发”的3个专业,为了防秃头,大家慎重报考!...

    原标题:高校里容易"掉头发"的3个专业,为了防秃头,大家慎重报考! 对于高中生来说,填报高考志愿是一生中的一件大事,所以一般学生都要和家长商量很久,才能确定自己要报哪所大学和哪个专 ...

  9. 程序员最大的问题是掉头发!有人问:怎样既当程序员又不掉头发?

    程序员月薪五万,一身行头四万块,衣服三百块,裤子二百块,鞋五百块,剩下的三万九,是用来植发的.这个狗血的段子,把程序员调侃的体无完肤. 这个世界,对程序员一点都不善良,挤兑我们没女朋友,挤兑我们头发少 ...

最新文章

  1. iOS 线程安全之@synchronized的用法
  2. 【源码分析】极验验证官方SDK源码分析和实现思路
  3. python画曲线图例-Python数据可视化之Matplotlib(折线图)
  4. 【转】 Java中的变量赋值和参数传递
  5. Swin Transformer对CNN的降维打击
  6. oracle导出导入emp,oracle导入导出操作
  7. s5-1 网络层引言
  8. PHP中unset,array_splice删除数组中元素的区别
  9. 蓝桥杯入门训练圆的面积c语言,蓝桥杯-入门训练-圆的面积
  10. OpenShift 4 - Fedora CoreOS (4) - 用 Ignition 定制 CoreOS 的网络/存储等配置
  11. 【Maven】import maven依赖安装失败——暂时玄学解决
  12. java 正则 非贪婪_正则表达式中贪婪模式与非贪婪模式的区别
  13. JAVA导入gpx文件_如何将GPX文件导入到行者、佳明、百锐腾等设备
  14. win10系统安装sql不上服务器,win10安装sql2000没有反应怎么办_win10安装不了sql2000的解决方法...
  15. three.js 05-01 之 PlaneGeometry 几何体
  16. MySQL 临时表的原理以及优化手段
  17. 使用HSL连接欧姆龙PLC配置
  18. IT行业34个最新专业术语
  19. SwiftUI之深入解析如何使用组合矩形GeometryReader创建条形(柱状)图
  20. 蓝色天空HTML网页模板

热门文章

  1. openmv与stm32之间的通信学习(数字识别)
  2. 声誉:你就是你的信用分数
  3. 【运维实战家】无线三建七优之设备选型-锐捷无线
  4. 2023年云计算领域五大趋势
  5. 数据库表的关联关系有几种?
  6. Linux删除文件后空间未释放问题处理方法
  7. 【CTF】-Crypto练习日志8.1
  8. 【日语】日语国际贸易用语
  9. 拷贝单个文件到U盘提示“目标文件系统 文件过大”,不需格式化解决
  10. 鼠须管输入法 傻瓜版配置 - 基于 rime_pro 增强包