作者:Yang Eninala
链接:https://www.zhihu.com/question/23005815/answer/33971127
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

根据我的理解,大多数人用汉密尔顿四元数就只是做三维空间的旋转变换(我反正没见过其他用法)。那么你不用学群论,甚至不用复习线性代数,看我下面的几张图就可以了。

首先,定义一个你需要做的旋转。旋转轴为向量,旋转角度为(右手法则的旋转)。如下图所示:
此图中,

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


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


如果你想算一个点在这个旋转下新的坐标,需要进行如下操作,
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的区域内和一个单位矩阵有所不同。所以说,它是一个限制在三维超平面上的四维旋转。如果表达式右边不是共轭,而是任意四元数,那么我们所作的就是一个很普通的四维旋转。如果只是左乘一个单位四元数,右边什么都不乘,那么我们得到的是四维旋转的一个子集,这个子集并不能保证结果限制在三维超平面上。如果只右乘,不左乘也是一样一样的。

说了这么多,对于坚持到最后的你,上图一幅,以表感谢。

其实这张图解释了一个长久的疑问。为什么四元数里用的是而不是。这是因为做的就是一个的旋转,而也做了一个的旋转。我们进行了两次旋转,而不是一次,这两次旋转的结果是一个旋转角为的旋转。

编辑于 2015-03-08

四元素的真面目..........简单粗暴相关推荐

  1. 用python编程小程序制作_Python编写四人24小时值班表生成小程序【简单粗暴】

    一.简介 比较重要的机房.动力供电等运维场景中,一般需要24小时有人值班,领导往往会在每个月前整理一个Excel值班表格.每次手工制作表格比较浪费时间,所以这里花了一点时间,用Python代码实现自动 ...

  2. linux卸载android studio,mac上完整卸载删除.简单粗暴无脑:androidstudio删除方案

    如果你是mac  ,你删除as ,删不干净也正常,你会发现安装的时候,前面的东西也在.配置文件在,会导致你以前的错误不想要的东西都在. 废话不多说,复制粘贴就是干!!!!~~~~~~~~ 第一步: 复 ...

  3. 简单粗暴上手TensorFlow 2.0,北大学霸力作,必须人手一册!

    (图片付费下载自视觉中国) 整理 | 夕颜 出品 | AI科技大本营(ID:rgznai100) [导读] TensorFlow 2.0 于近期正式发布后,立即受到学术界与科研界的广泛关注与好评.此前 ...

  4. 使用python用什么软件-Python读写Excel表格,就是这么简单粗暴又好用

    Python读写Excel表格,就是这么简单粗暴又好用 2019-04-18 13:45:31 11点赞 107收藏 1评论 最近在做一些数据处理和计算的工作,因为数据是以.csv格式保存的,因此刚开 ...

  5. python处理表格很厉害么_Python读写Excel表格,就是这么简单粗暴又好用

    关注恋习Python(ID:sldata2017) 这是恋习Python之手把手系列第5篇原创首发文章 最近在做一些数据处理和计算的工作,因为数据是以.csv格式保存的,因此刚开始直接用Excel来处 ...

  6. 一个简单粗暴的前后端分离方案

    项目背景 刚刚参加完一个项目,背景:后端是用java,后端服务已经开发的差不多了,现在要通过web的方式对外提供服务,也就是B/S架构.后端专注做业务逻辑,不想在后端做页面渲染的事情,只向前端提供数据 ...

  7. python对excel操作简书_Python读写Excel表格,就是这么简单粗暴又好用

    最近在做一些数据处理和计算的工作,因为数据是以.CSV格式保存的,因此刚开始直接用Excel来处理. 但是做着做着发现重复的劳动,其实并没有多大的意义,于是就想着写个小工具帮着处理. 以前正好在一本书 ...

  8. 如何简单粗暴地上手 TensorFlow 2.0?

    整理 | 夕颜 出品 | AI科技大本营(ID:rgznai100) [导读] TensorFlow 2.0 于近期正式发布后,立即受到学术界与科研界的广泛关注与好评.此前,我们曾特邀专家回顾了 Te ...

  9. 破解root密码,简单粗暴—干就完了!!!

    第一步: 启动Linux系统,在读秒阶段按'e' 进来之后就是这个页面 第二步: 用方向'下键'将光标移动到Linux这段最后 命令:空格后输入rd.break console=tty0 之后ctrl ...

最新文章

  1. Redhat5中discuz 7论坛的搭建
  2. 主成分分析法_数学建模 || 葡萄酒的评价(1)主成分分析法
  3. 论文笔记_S2D.39_2015-ICCV-条件随机场作为递归神经网络(CRF-RNN)
  4. 为多个VLAN实现DCHP
  5. C++#ifndef/#define/#endif的用法
  6. 软考网络工程师笔记-分值分布
  7. 离散傅里叶变换(DFT)
  8. 搜索引擎学习之旅3 - 搜索引擎工作流程
  9. 注册gmail邮件,遇到“此电话号码无法用于进行验证”该怎么办
  10. 16 - 12 - 20 KMP算法 模式匹配 终极奥义!
  11. CentOS7 配置与管理DHCP服务器及DHCP中继代理 DHCP服务实训整合
  12. RedisDesktopManager(Redis可视化工具)
  13. centos 6.7 mysql密码忘记_CentOS 7安装MySQL5.7以及忘记root密码怎么办
  14. Java攻略之API
  15. 什么是SPA(单页面应用)?
  16. [Zookeeper-3.6.2源码解析系列]-14-Zookeeper使用到的Reactor网络模型原理分析
  17. 腾讯云 云点播 JAVASDK上传
  18. 拿到阿里,网易游戏,腾讯,smartx的offer的过程 (转)
  19. 家庭卡拉OK的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. 新书字码的差不多了,想众包几个事情

热门文章

  1. struts2框架下的一个简单的ajax例子
  2. 用boost库实现traceroute小工具
  3. Shell Notes(1)
  4. 解压版本的tomcat服务安装
  5. 不能修改“System Roots”钥匙串
  6. javaScript第六天(1)
  7. 关于Unity中NGUI的背包实现之Scrollview(基于Camera)
  8. javascript设置和获取cookie的方法
  9. JSP慕课网阶段用户登录小例子(不用数据库)
  10. 01-Swift 介绍