开启辅助访问
 找回密码
 立即注册

如何形象地理解四元数?

银鲜目江探 回答数5 浏览数984
关于 quaternion 的资料(包括网络教程与书籍)已经看过很多,但大脑内无法形成对 quaternion 的形象理解。请问是否要对群论、四维赋范可除代数这些数学知识深入研究才可以有形象的理解?如果有好的教程、动态图、视频之类的资源,请不吝赐教。
使用道具 举报
| 来自内蒙古 用Deepseek满血版问问看
星星的眼 | 来自北京
最近写了一篇关于四元数的教程(仅仅只包括计算机图形学中的应用)。虽然可能有一点长,而且大部分都是数学,但是如果仔细阅读的话理解起来应该不会有那么大的困难。希望能够帮助到你。
地址在这里:https://krasjet.github.io/quaternion/
顺便附带了一些Demo动画:https://github.com/Krasjet/quaternion/tree/master/demo
除此之外,我还写了一个Bonus章节,简单讨论了一下Gimbal Lock产生的原因:https://krasjet.github.io/quaternion/bonus_gimbal_lock.pdf
更新:

  • 2/18/2019:新添加了一个章节「附录 2:左手坐标系统下的旋转」,讨论了一下左手坐标系统下的旋转以及坐标系转换的问题
因为只校对过一遍,所以肯定会有很多错误,请见谅。
<hr/>p.s. 很巧合,3Blue1Brown正好也开始了四元数系列视频,如果你觉得我的文章不够形象的话,可以来看他的视频:

  • 第一集:https://youtu.be/d4EgbgTm0Bg

    • 中文版:https://www.bilibili.com/video/av33385105

  • 第二集:https://youtu.be/zjMuIxRvygQ

    • 可互动的视频教程:Visualizing quaternions, an explorable video series


到现在为止四元数学习困难的问题应该就算完全解决了吧_(:з」∠)_
<hr/>If you like what I wrote, you might also want to take a look at

  • julia as a cli calculator
  • Poisson summation formula, revisited
用Deepseek满血版问问看
回复
使用道具 举报
szlee2008 | 来自江苏
提供一种比较新的视角吧,好像没看到其他答案写过.
四元数可以看做“复数的复数”.
相应,复数是“实数的复数”.
先看复数是怎么样弄出来的:假设,复数就是,其中,为实数.
现在看四元数:假设,四元数就是,其中,为复数.
接下来看那套四元数奇怪规则.
把四元数里的,写成,.
我们发现所谓的就是.
几何上说,就像同胚于,四元数全体同胚于也同胚于.(题主要的形象)
这个思路也比较容易想象为什么可以推广到八元数而没有五六七元数.
P.S.还有更高维推广,但是四元已经牺牲了交换律,八元又牺牲了结合律,反正之后的推广性质都比较差,有兴趣的可以搜超复数.

补充,从以上构造也可以看出,ijk的地位是一样的,我们也可以从一开始就把平方为-1的那个东西称为j。或者把“复数的复数”那段的j记为k。等等。
回复
使用道具 举报
zjwaxy | 来自北京
@王洋子豪 贴的那篇文章
Understanding Quaternions3D Game Engine Programming,我翻译成中文了,英文吃力的童鞋可以参考下。
Understanding Quaternions 中文翻译《理解四元数》
回复
使用道具 举报
jyelok | 来自北京
根据我的理解,大多数人用汉密尔顿四元数就只是做三维空间的旋转变换(我反正没见过其他用法)。那么你不用学群论,甚至不用复习线性代数,看我下面的几张图就可以了。
首先,定义一个你需要做的旋转。旋转轴为向量,旋转角度为(右手法则的旋转)。如下图所示:
此图中,


那么与此相对应的四元数(下三行式子都是一个意思,只是不同的表达形式)


这时它的共轭(下三行式子都是一个意思,只是不同的表达形式),


如果你想算一个点在这个旋转下新的坐标,需要进行如下操作,
1.定义纯四元数

2.进行四元数运算

3.产生的一定是纯四元数,也就是说它的第一项为0,有如下形式:

4.中的后三项就是:

这样,就完成了一次四元数旋转运算。
同理,如果你有一个四元数:

那么,它对应一个以向量为轴旋转角度的旋转操作(右手法则的旋转)。
***********************************************************************************************************
如果你想对四元数有着更深入的了解,请往下看。
四元数由汉密尔顿发明,这一发明起源于十九世纪的某一天。在这一天早上,汉密尔顿下楼吃早饭。这时他的儿子问他,“爸爸,我们能够对三元数组(triplet,可以理解为三维向量)做乘法运算么?”汉密尔顿说“不行,我只能加减它们。”
这时来自21世纪的旁白旁先生说,“大家快来看十九世纪的数学家有多二,连内积和外积都不是知道。”
十九世纪的汉密尔顿也许确实不知道内积和外积,但是他知道,他想要的三维向量乘法要比内积和外积运算“高大上”很多。这一乘法运算要满足下列四条性质:
1.运算产生的结果也要是三维向量
2.存在一个元运算,任何三维向量进行元运算的结果就是其本身
3.对于任何一个运算,都存在一个逆运算,这两个运算的积是元运算
4.运算满足结合律
换而言之,汉密尔顿想定义的不是一个简单的映射关系,而是一个群!(后来我们知道四元数所在群为S3,而四元数所代表的三维旋转是SO(3),前者是后者的两倍覆盖)内积连性质1都不满足,外积不满足性质3。
汉密尔顿先生就这么被自己儿子提出的问题难倒了。经历了无数个日日夜夜,他绞尽脑汁也没想明白这个问题。终于有一天(1843年的一天),汉密尔顿先生终于意识到了,自己所需要的运算在三维空间中是不可能实现的,但在四维空间中是可以的,他是如此的兴奋,以至于把四元数的公式刻在了爱尔兰的一座桥上。
旁白:“WTF,我让你讲三维物体的旋转,你给我扯到四维空间上去。”
(不加说明,以下所说四元数全为单位四元数)
其实,四元数有四个变量,完全可以被看作一个四维向量。单位四元数(norm=1)则存在于四维空间的一个球面上。,四元数乘以四元数其实看作(1)对进行左旋转,或者(2)对进行右旋转。所以从始至终,四元数定义的都是四维旋转,而不是三维旋转!任意的四维旋转都可以唯一的拆分为一个左旋转和一个右旋转,表达出来就是。这里,我们对四元数(四维向量)进行了一个左旋转和一个右旋转。结果当然是一个四元数,符合性质1。这个运算也同时符合性质2,3,4。
好了,说完了四维旋转,我们终于可以说说三维旋转了。说白了,三维旋转就是四维旋转的一个特例,就像二维旋转是三维旋转的一个特例一样。说是特例其实不准确,准确的说是一个子集或者subgroup。为了进行三维旋转运算,汉密尔顿首先在四维空间里划出了一块三维空间。汉密尔顿定义了一种纯四元数(pure quaternion),其表达式为。纯四元数第一项为零,它存在于四维空间的三维超平面上,与三维空间中的三维向量一一对应。然后,就有了我们常见的这种左乘单位四元数,右乘其共轭的表达式。我真心不知道汉密尔顿是怎么想出来的,不过回过头来看,这个运算形式是为了限制其运算结果所在的空间。简单的说,当对一个三维向量进行三维旋转后,我们希望得到的是一个三维向量。(如果你真能得到一个四维向量,就不敢自己在家转圈圈了吧,转着转着,就进入四次元了!)那么这个左乘单位四元数,右乘其共轭的运算保证了结果是一个在三维超平面上中的纯四元数。
把左乘和右乘表达为矩阵形式会让我们看的更清楚一些。依照的定义,的矩阵形式为

很明显,前面的矩阵虽然是一个4x4的四维旋转矩阵,但是它只是在右下角3x3的区域内和一个单位矩阵有所不同。所以说,它是一个限制在三维超平面上的四维旋转。如果表达式右边不是共轭,而是任意四元数,那么我们所作的就是一个很普通的四维旋转。如果只是左乘一个单位四元数,右边什么都不乘,那么我们得到的是四维旋转的一个子集,这个子集并不能保证结果限制在三维超平面上。如果只右乘,不左乘也是一样一样的。
说了这么多,对于坚持到最后的你,上图一幅,以表感谢。


其实这张图解释了一个长久的疑问。为什么四元数里用的是而不是。这是因为做的就是一个的旋转,而也做了一个的旋转。我们进行了两次旋转,而不是一次,这两次旋转的结果是一个旋转角为的旋转。
回复
使用道具 举报
god62477621 | 未知
四元数可视为复数的扩展。在复数中,定义了,而四元数中则定义了。然后如同复数定义出乘法,但复数的乘法是可交换的(commutative),而四元数的乘法是非可换的(non-commutative)。在复数平面中,可以用极坐标的几何方法理解乘法,但在四元数的四维空间中,就不是那么容易理解。
个人认为许多代数并不一定能形像化地理解,只能从其特性及结构去理解。所以学习群论对理解这些代数结构应该是有帮助的,例如凯莱图(Cayley graph)可以展示有限群的结构。
在计算机图形学和计算物理学的应用中,使用了单位四元数(unit quaternion)来表示三维空间的旋转(rotation)及定向(orientation)。这又涉及了旋转群SO(3)。除了把单位四元数相乘去比示旋转变换的串接,在图形学中很重要的SLERP操作,则需要四元数的log和exp的定义。而在计算物理学中,需要对角速度、角加速度以时间来积分。个人认为在应用中能掌握这几个对单位四元数的操作大概已足够。
有一本专著
Visualizing Quaternions (The Morgan Kaufmann Series in Interactive 3D Technology) (豆瓣),大概是最能形像地理解四元数了。在
Game Physics Pearls (豆瓣)中,也有谈及单位四元数的数值积分问题。
回复
使用道具 举报
快速回复
您需要登录后才可以回帖 登录 | 立即注册

当贝投影