土圭垚㙓数学课(三)四元数
何为四元数?讲解四元数的文章往往会把四元数跟复数联系在一起。诚然,四元数的起源跟复数有关系,但是理解复数系统并不是理解四元数的首要条件。
提到四元数,我们首先要提到一个人——莱昂哈德·欧拉(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来保存旋转)。
土圭垚㙓数学课(三)四元数相关推荐
- 土圭垚㙓数学课(四)空间变换
我曾经在Shader山下(十六)坐标空间与转换矩阵中介绍过,一个物体要显示在平面上,需要经过四步空间变换(实际上是五步): 物体空间->世界空间->观察空间->裁剪空间(->归 ...
- 土圭垚㙓数学课(一)万向锁(Gimbal Lock)
何为万向锁,我们先抛弃掉那些理论,直接举个栗子. 以你自身为对象. 首先,原地旋转为第一个维度,也就是heading. 其次,正翻跟头为第二个维度,也就是pitch. 然后,侧翻跟头为第三个维度,也就 ...
- 土圭垚㙓数学课(二)视锥体八个顶点的计算方法
视锥体是摄像机可见的空间,看上去像截掉顶部的金字塔.视锥体由6个裁剪面围成,构成视锥体的4个侧面称为上左下右面,分别对应屏幕的四个边界.为了防止物体离摄像机过近,设置近切面,同时为了防止物体离摄像机太 ...
- Shader山下(十六)坐标空间与转换矩阵
模型空间(model space)也称为对象空间(object space)或局部空间(local space)是指以模型原点为原点的坐标系. 世界空间(world space)也称全局空间(glob ...
- Unity Shader中内置的坐标空间与转换矩阵函数
模型空间(model space)也称为对象空间(object space)或局部空间(local space)是指以模型原点为原点的坐标系. 世界空间(world space)也称全局空间(glob ...
- 【搞定工作】无惧尾款,打工就要来这里!
各位打工人.尾款人,你们的钱包都还好吗?被双十一掏空余额的小伙伴们,来呀,来和小誉一起吃土呀~ 付两次尾款,收两波快递,最后吃双份的土,"吃圭人"就这样华丽又心酸的诞生了. 不过大 ...
- 又双叒叕 - 中国汉字的奇妙
四个字组成的汉字: 又双叒叕[zhuo] 屮艸芔茻[mǎng] 火炎焱燚[yi] 一二三亖[si] 土圭垚㙓[dui] 口吕品田[tian] 水沝淼㵘[man] 日昌晶[liu] 木林森[gua] 月 ...
- 写带有代码博客的小技巧
又双叒叕大家都知道是什么意思吗?知道怎么读吗?它们其实是一个网络流行用语,通常读作"yòu,shuāng,ruò,zhuó".表示某事物变化更替相当频繁,也表示一件事反复出现. 还 ...
- 三个字的字,值得收藏
三个金念鑫(xīn) 三个水念淼(miǎo) 三个火念焱(yàn) 三个土念垚(yáo) 三个牛念犇(bēn) 三个手念掱(pá) 三个目念瞐(mò ...
最新文章
- ECLIPSE 插件使用LINKS目录的用法
- 【Python-ML】神经网络-多层感知器
- GLUEscript(wxJavascript)
- 360获公安部“优秀技术支持单位”等七项荣誉
- http://www.easyui.info/archives/396.html
- windows10百度网盘下载,windows iso文件下载
- 百度网盘分享qt相关视频
- edge浏览器怎么设置html5,win10怎么把edge浏览器设置为默认浏览器方法
- JSONP跨域以及CORS跨域
- BIGO全球音视频技术解决方案
- 腾讯裁员,裁出“财务自由”
- 微信小程序 + 腾讯位置服务SDK 实现路线规划
- 挑战10的1,143,913次方种算法组合:这都不是事儿~~
- React实现实时/局部刷新
- Word交叉引用怎么才能只引用编号项
- 三星手机安装linux系统下载,ubuntu手机系统安装教程【详细步骤】
- Ubuntu18.04安装好后 一定要做的N个事情 (一)
- 视频号带货玩法拆解,无私分享给有需要的你「视频教程」
- C# 进行 Starlink 仿真 万里长征走了半步 ^_^
- MIKE 21 教程 1.6 基于DEM数据设置河道高程