四元数 Quaternion
最近在重写自己游戏引擎的场景管理模块,重温了一下有关四元数的一些知识,在此做一下简单的笔记。
四元数可以用来准确地描述三维矢量的旋转,并且可以有效地表达多个旋转操作的叠加,因此在三维游戏引擎的场景管理模块中,四元数具有很重要的意义。
本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/
一、定义
形如A = ai + bj + ck + d的复数称为四元数,其中i、j、k为虚数(称为四元数的基元),a、b、c、d为实数。
二、常见性质
1. i2 = j2 = k2 = -1
2. ij = k jk = i ki = j
3. ij = –ji jk = –kj ki = -ki
4. ii* = 1 i* = –i 即i*与i共轭,j、k同理
5. 四元数的乘法运算满足结合律与分配律,不满足交换律
6. 将四元数虚部看作三维矢量,则两个四元数的矢量部分乘积为αβ = -α•β +α×β,令四元数A = α + d1,B = β + d2,则
AB = -α•β +α×β + d2α + d1β + d1d2 = (d1a2 – c1b2 + b1c2 + a1d2) i
+ (c1a2 + d1b2 – a1c2 + b1d2) j
+ (-b1a2 + a1b2 + d1c2 + c1d2) k
– a1a2 – b1b2 – c1c2 + d1d2
7. (AB)* = B*A*
8. 定义四元数 A = ai + bj + ck + d 的范数为:||A|| = a2 + b2 + c2 + d2 ,模为:|A| = sqrt(a2 + b2 + c2 + d2)
9. 定义四元数A的逆为: A-1 = A* / ||A||
10. A-m = (A-1)m = (Am)-1
三、使用四元数表述矢量旋转
假设矢量α绕转轴e = (xe,ye,ze)旋转θ角得到β,则:
β = uαu-1
其中:
u = e sin(θ/2) + cos(θ/2)
u-1 = u* = - e sin(θ/2) + cos(θ/2)
因此,我们可以使用四元数u = (x,y,z,w)表示坐标旋转,其中:
x = sin(θ/2) xe
y = sin(θ/2) ye
z = sin(θ/2) ze
w = cos(θ/2)
四、使用矩阵表示坐标旋转
假设旋转轴为a = (xa,ya,za),旋转角为α,则旋转矩阵如下:

五、四元数与旋转矩阵的转化
根据半角公式:
sinα = 2sin(α/2)•cos(α/2)
cosα = cos2(α/2) - sin2(α/2)
cos2(α/2) = (1 +cosα)/2
sin2(α/2) = (1 -cosα)/2
四元数转化为旋转矩阵可表示如下:

四元数 Quaternion的更多相关文章
- 学习和研究下unity3d的四元数 Quaternion
学习和研究下unity3d的四元数 Quaternion 今天准备学习和研究下unity3d的四元数 Quaternion 四元数在电脑图形学中用于表示物体的旋转,在unity中由x,y,z,w 表示 ...
- unity3d的四元数 Quaternion
原地址:http://www.cnblogs.com/88999660/archive/2013/04/02/2995074.html 今天准备学习和研究下unity3d的四元数 Quaternion ...
- 四元数Quaternion的基本运算
技术背景 在前面一篇文章中我们介绍了欧拉角死锁问题的一些产生背景,还有基于四元数的求解方案.四元数这个概念虽然重要,但是很少会在通识教育课程中涉及到,更多的是一些图形学或者是工程学当中才会进行讲解.本 ...
- 四元数quaternion
四元数的简单方法运用四元数在Unity3D中的作用就是拿来表示旋转. AngleAxis 创建一个旋转,绕着某个轴旋转,返回结果是一个四元数. 跟ToAngleAxis实现的是相反的功能. Angle ...
- [Unity Quaternion]四元数Quaternion的计算方式
什么是Quaternion四元数 1843年,William Rowan Hamilton发明了四元数,但直到1985年才有一个叫Ken Shoemake的人将四元数引入计算机图形学处理领域.四元数在 ...
- 【Unity编程】四元数(Quaternion)与欧拉角
版权声明:本文为博主原创文章,欢迎转载.请保留博主链接:http://blog.csdn.net/andrewfan 欧拉旋转.四元数.矩阵旋转之间的差异 除了欧拉旋转以外,还有两种表示旋转的方式:矩 ...
- 【转】【Unity】四元数(Quaternion)和旋转
http://blog.csdn.net/candycat1992/article/details/41254799
- 四元数和旋转(Quaternion & rotation)
四元数和旋转(Quaternion & rotation) 本篇文章主要讲述3D空间中的旋转和四元数之间的关系.其中会涉及到矩阵.向量运算,旋转矩阵,四元数,旋转的四元数表示,四元数表示的旋转 ...
- 【Unity编程】Unity中关于四元数的API详解
本文为博主原创文章,欢迎转载,请保留出处:http://blog.csdn.net/andrewfan Unity中关于四元数的API详解 Quaternion类 Quaternion(四元数)用于计 ...
随机推荐
- Linux系统——进程和计划任务管理
进程和计划任务管理 一.进程和程序的关系 进程:在CPU及内存中运行的程序代码:动态执行的代码:每个进程可以创建一个或多个进程 程序:保存在硬盘.光盘等介质中的可执行代码和数据:静态保存的代码 二.基 ...
- 前端神器ws激活步骤
第一步:下载破解文件 也可以直接去我的github仓库中下载 第二步骤:操作bin目录的文件bin目录window下和mac下大致相同,故而不在单独说window a.将补丁复制到webstorm安装 ...
- Centos 6.5 Install Mysql 8.0.0
依赖包 yum install numactl libaio perl-Time-HiRes per-devel -y 下载对应系统版本下载 wget http://cdn.mysql.com//Do ...
- 『NiFi 学习之路』自定义 —— 组件的自定义及使用
一.概述 许多业务仅仅使用官方提供的组件不能够满足性能上的需求,往往要通过高度可定制的组件来完成特定的业务需求. 而 NiFi 提供了自定义组件的这种方式. 二.自定义 Processor 占坑待续 ...
- HDU - 4786 Fibonacci Tree (MST)
题意:给一张由白边和黑边构成的无向图,求是否存在一个生成树,使白边的数量为一个斐波那契数. 分析:白边权值为1,黑边权值为0.求出该图的最小生成树和最大生成树,若这两个值之间存在斐波那契数,则可以,若 ...
- scp无密码访问scp -i
网上搜索,可以发现大概有以下情况 1.使用expect交互 2.sshpass 但因为他们都需要安装第三方的软件,不适合我们这样的场景,我们很多时间是绝不允许安装其他软件在客户机上的. 我的场景是在本 ...
- git 移除某个文件的版本管理
1:最简单的,在项目刚创建的时候,在根目录的.gitignore,加入该文件的相对路径 2:已经被纳入到了版本控制,使用在当前目录下,打开cmd窗口 输入rm命令,加上文件的绝对路径(相对路径没试过) ...
- RBAC权限模型——项目实战
RBAC权限模型——项目实战
- Java并发编程:并发容器之ConcurrentHashMap(转)
本文转自:http://www.cnblogs.com/dolphin0520/p/3932905.html Java并发编程:并发容器之ConcurrentHashMap(转载) 下面这部分内容转载 ...
- AB测试的需求
一.背景 涉及到的项目是 SDK, 用户量 几千万级别,需要调整的是 订单购买整个逻辑,已经发现了低概率问题,影响到的订单不到 0.001% ,但是每周总有几个用户向客服反馈问题.整个逻辑问题,在我入 ...