四元数 Quaternion

摘要:
最近,我正在重写我自己的游戏引擎的场景管理模块,以复习有关四元数的一些知识。这里有一些简单的注释。四元数可以用来精确描述三维向量的旋转,并且可以有效地表达多个旋转操作的叠加。因此,四元数在3D游戏引擎的场景管理模块中具有重要意义。

最近在重写自己游戏引擎的场景管理模块,重温了一下有关四元数的一些知识,在此做一下简单的笔记。

四元数可以用来准确地描述三维矢量的旋转,并且可以有效地表达多个旋转操作的叠加,因此在三维游戏引擎的场景管理模块中,四元数具有很重要的意义。

本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/

 


 

一、定义

形如A = ai + bj + ck + d的复数称为四元数,其中ijk为虚数(称为四元数的基元),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共轭,jk同理

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 + d,模为:|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),旋转角为α,则旋转矩阵如下:

clip_image002

五、四元数与旋转矩阵的转化

根据半角公式:

sinα = 2sin(α/2)•cos(α/2)

cosα = cos2(α/2) - sin2(α/2)

cos2(α/2) = (1 +cosα)/2

sin2(α/2) = (1 -cosα)/2

四元数转化为旋转矩阵可表示如下:

clip_image004

免责声明:文章转载自《四元数 Quaternion》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇AtCoder Regular Contest 100 (ARC100) EPython3常用标准库下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

旋转矩阵、欧拉角、四元数理论及其转换关系

博客转载自:http://blog.csdn.net/lql0716/article/details/72597719 1. 概述 旋转矩阵、欧拉角、四元数主要用于表示坐标系中的旋转关系,它们之间的转换关系可以减小一些算法的复杂度。 本文主要介绍了旋转矩阵、欧拉角、四元数的基本理论及其之间的转换关系。 2、原理 2.1 旋转矩阵 对于两个三维...

四元数运动学笔记(2)旋转向量,旋转矩阵和四元数的关系

参考资料1.向量旋转公式2.旋转矩阵和旋转向量2.1旋转矩阵微分和旋转向量的推导2.2罗德里格旋转公式3.四元数和旋转向量3.1 由欧拉参数推导四元数3.2旋转向量表示四元数4.旋转矩阵和四元数5.欧拉角和旋转向量角 参考资料 Quaternion kinematics for the error-state KF barfoot《st...

机器人学——2.3-姿态插值和笛卡尔运动

之前我们提到mstraj函数并不是不是对坐标系旋转进行插值的理想方式。 在机器人学中,我们经常需要对姿态进行插值。例如,我们需要机器人的末端执行器平滑地从姿态 ξ0xi_0ξ0​ 和改变到 ξ1xi_1ξ1​。假设某个函数 ξ(s)=σ(ξ0,ξ1,s)xi(s)=sigma(xi_0, xi_1, s)ξ(s)=σ(ξ0​,ξ1​,s),其中 s∈[0,...

Quaternion:通过API对Quaternion(四元数)类中的方法属性初步学习总结(二)

1.RotateTowards方法 RotateTowards(From.rotation,To.rotation,fspeed) 个人理解:使From的rotation以floatspeed为速度,旋转到To的rotation speed而是指每次移动的最大长度 2.Slerp球形插值 Quaternion.Slerp(A.rotation,B.rota...

首个threejs项目-前端填坑指南

第一次使用threejs到实际项目中,开始的时候心情有点小激动,毕竟是第一次嘛,然而做着做着就感受到这玩意水好深,满满的都是坑,填都填不过来。经过老板20天惨无人道的摧残,终于小有成就。 因为第一次搞这玩意,相对的遇到的问题也是大把的,让我来一一诉说一路上遇到的各种问题。 开发使用: C4D、Blender2.75、[threejs-r72](http:...

四元数运动学笔记(4)旋转的雅克比矩阵

1.相对于旋转向量的雅克比2.相对于四元数的雅克比2.1相关公式2.2推导雅克比 1.相对于旋转向量的雅克比 这里在全局系下利用左扰动进行推导: ∂a′∂θ=∂Ra∂θ 2.相对于四元数的雅克比 2.1相关公式 三叉积公式: 纯实部的四元数和四元数相乘,这里qw是实数 [qw,03]T⊗q=qwq1⊗q=qwq 两个纯虚四元数相...