何为四元数?讲解四元数的文章往往会把四元数跟复数联系在一起。诚然,四元数的起源跟复数有关系,但是理解复数系统并不是理解四元数的首要条件。

提到四元数,我们首先要提到一个人——莱昂哈德·欧拉(Leonhard Euler),根据欧拉旋转定理(wiki),在三维空间里,假设一个刚体在做一个位移的时候,刚体内部至少有一点固定不动,则此位移等价于一个绕着包含那固定点的固定轴的旋转。还有另外一种阐述:3D中的任意角位移都能表示为绕单一轴的单一旋转。如图所示:

所谓角位移也就是旋转,我们通常用欧拉角表示,这也是最容易理解的一种形式。

那么轴-角形式跟四元数有什么关系?它们并不等同,但是却也密不可分。

上图的四元数表示法:

q=[cos(θ/2) sin(θ/2)e]

注意这里e是图中的向量,即

q=[cos(θ/2) sin(θ/2)ex sin(θ/2)ey sin(θ/2)ez]

那么接着我们就要讨论四元数跟复数的关系了,首先先把William Hamilton这个四元数的发明者提出来,免得大家觉得没意思跳过了这段。

首先,什么是复数?

我们知道在实数范围里,对负数开方是没有意义的。但是偏偏有人愿意做“没有意义”(注意这里是引号)的事情,于是定义了虚数i,i的平方等于-1。

那么当实数和虚数加在一起,便成为了复数。

a+bi

其中a被称为实部,b被成为虚部。

因为有实部和虚部,所以我们可以认为在复数集存在于一个2D平面(复数平面,又称高斯平面)上,两个轴分别为实轴和虚轴,这样x+yi就可以视作一个2D的点P为(x,y)。

当P绕原点旋转角度θ时

我们可以用另外一个复数来表示这个旋转:

q=cosθ+isinθ

旋转后的点

p1=pq=(x+yi)(cosθ+isinθ)=(xcosθ-ysinθ)+(xsinθ+ycosθ)i

因为i的平方为-1,所以复数为我们提供了一个有趣的旋转的表示法。(我们可以将这里的q理解为“2D平面上的四元数”,但其实他们之间还是有区别的)

然后我们的主角终于登场了,爱尔兰数学家William Hamilton多年来一直致力于寻找一种方法将复数从2D扩展到3D。他认为,这种新的复数应该有一个实部和两个虚部。然而,Hamilton一直没有办法创造出一种有两个虚部的有意义的复数。但故事并没有结束,1843年,在赴皇家爱尔兰学院演讲的路上,他突然意识到应该有三个虚部而不是两个。他把定义这种新复数类型性质的等式刻在Broome桥上。这样,四元数就诞生了。(本段抄自《3D数学基础:图形与游戏开发》)

四元数扩展了复数系统,它使用三个虚部i,j,k。它们的关系如下:

ii=jj=kk=-1

ij=k,ji=-k

jk=i,kj=-i

ki=j,ik=-j

一个四元数[w, x, y, z]定义了复数w+xi+yj+zk。

具体四元数的一些公式,我们有缘再讲,只是有一个必须要提一下,这也是2D和3D上的区别。

定义三维上的点(x,y,z)在四元数空间上的坐标p=[0,x,y,z],那么如何让这个点绕轴e旋转θ?我们设绕轴e旋转θ对应的四元数为q,那么旋转后的点为:

p1=qpq-1

其中q-1为q的逆(等于q的共轭复数除以q的模,[w,x,y,z]的共轭为[w,-x,-y,-z],模的定义与向量模类似,为各项平方和的开方)。

(Unity3D里我们可以直接用四元数Quaternion乘以向量Vector3,得到旋转后的点)

最后提一句,四元数可以解决欧拉角的万向锁问题和别名问题(所以U3D里使用Quaternion来保存旋转)。

土圭垚㙓数学课(三)四元数相关推荐

  1. 土圭垚㙓数学课(四)空间变换

    我曾经在Shader山下(十六)坐标空间与转换矩阵中介绍过,一个物体要显示在平面上,需要经过四步空间变换(实际上是五步): 物体空间->世界空间->观察空间->裁剪空间(->归 ...

  2. 土圭垚㙓数学课(一)万向锁(Gimbal Lock)

    何为万向锁,我们先抛弃掉那些理论,直接举个栗子. 以你自身为对象. 首先,原地旋转为第一个维度,也就是heading. 其次,正翻跟头为第二个维度,也就是pitch. 然后,侧翻跟头为第三个维度,也就 ...

  3. 土圭垚㙓数学课(二)视锥体八个顶点的计算方法

    视锥体是摄像机可见的空间,看上去像截掉顶部的金字塔.视锥体由6个裁剪面围成,构成视锥体的4个侧面称为上左下右面,分别对应屏幕的四个边界.为了防止物体离摄像机过近,设置近切面,同时为了防止物体离摄像机太 ...

  4. Shader山下(十六)坐标空间与转换矩阵

    模型空间(model space)也称为对象空间(object space)或局部空间(local space)是指以模型原点为原点的坐标系. 世界空间(world space)也称全局空间(glob ...

  5. Unity Shader中内置的坐标空间与转换矩阵函数

    模型空间(model space)也称为对象空间(object space)或局部空间(local space)是指以模型原点为原点的坐标系. 世界空间(world space)也称全局空间(glob ...

  6. 【搞定工作】无惧尾款,打工就要来这里!

    各位打工人.尾款人,你们的钱包都还好吗?被双十一掏空余额的小伙伴们,来呀,来和小誉一起吃土呀~ 付两次尾款,收两波快递,最后吃双份的土,"吃圭人"就这样华丽又心酸的诞生了. 不过大 ...

  7. 又双叒叕 - 中国汉字的奇妙

    四个字组成的汉字: 又双叒叕[zhuo] 屮艸芔茻[mǎng] 火炎焱燚[yi] 一二三亖[si] 土圭垚㙓[dui] 口吕品田[tian] 水沝淼㵘[man] 日昌晶[liu] 木林森[gua] 月 ...

  8. 写带有代码博客的小技巧

    又双叒叕大家都知道是什么意思吗?知道怎么读吗?它们其实是一个网络流行用语,通常读作"yòu,shuāng,ruò,zhuó".表示某事物变化更替相当频繁,也表示一件事反复出现. 还 ...

  9. 三个字的字,值得收藏

    三个金念鑫(xīn)      三个水念淼(miǎo)     三个火念焱(yàn)       三个土念垚(yáo) 三个牛念犇(bēn)    三个手念掱(pá)         三个目念瞐(mò ...

最新文章

  1. ECLIPSE 插件使用LINKS目录的用法
  2. 【Python-ML】神经网络-多层感知器
  3. GLUEscript(wxJavascript)
  4. 360获公安部“优秀技术支持单位”等七项荣誉
  5. http://www.easyui.info/archives/396.html
  6. windows10百度网盘下载,windows iso文件下载
  7. 百度网盘分享qt相关视频
  8. edge浏览器怎么设置html5,win10怎么把edge浏览器设置为默认浏览器方法
  9. JSONP跨域以及CORS跨域
  10. BIGO全球音视频技术解决方案
  11. 腾讯裁员,裁出“财务自由”
  12. 微信小程序 + 腾讯位置服务SDK 实现路线规划
  13. 挑战10的1,143,913次方种算法组合:这都不是事儿~~
  14. React实现实时/局部刷新
  15. Word交叉引用怎么才能只引用编号项
  16. 三星手机安装linux系统下载,ubuntu手机系统安装教程【详细步骤】
  17. Ubuntu18.04安装好后 一定要做的N个事情 (一)
  18. 视频号带货玩法拆解,无私分享给有需要的你「视频教程」
  19. C# 进行 Starlink 仿真 万里长征走了半步 ^_^
  20. MIKE 21 教程 1.6 基于DEM数据设置河道高程

热门文章

  1. 前端画圆弧html弧线的像素,[js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形)...
  2. mfc小工具开发之定时闹钟之---时间获取和音频播放
  3. 青软集团联合桂林理工大学共建的大数据产业学院成功揭牌
  4. VS Code 修改字体颜色
  5. 关于会声会影视频窗口大小如何改变的解决
  6. 《卓有成效的管理者》导读
  7. linux scp迁移服务器
  8. 渣心的日子,值得成长
  9. 用google的网页快照
  10. !analyze -v