`
kongweile
  • 浏览: 517458 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

四元数概念及其应用

阅读更多
学习3D编程,四元数是不得不学的。其概念的引入和定义都比较抽象,今学了,总结归纳如下:
介绍四元数之前,先做如下约定:


1.采用右手坐标系(OpenGL)
2.旋转次序:x->y->z
3.  矩阵是列优先存储
1.什么是四元数?
直接用数学上的定义来解释,因为我很难在现实生活中找到可以描述明白的例子。

i, j, k 为虚数
Q = w + xi + yj + zk
其中w是实数,而x,y,z为复数。
另外一种常见的表达方式是:
Q = [w, v]
其中v=(x,y,z)称为矢量部(虽然称为矢量,但是这个不是三维空间中的矢量,而是四维空间的,想象吧L),w称为标量部。
2.四元数可以做什么?
有了四元数的概念还不行,四元数可以干什么?四元数可以用来描述方向。
先来看下如何求取四元数的长度:
||q|| = Norm(q) = sqrt(w2 + x2 + y2 + z2)
单位长度的四元数有以下属性:
w2 + x2 + y2 + z2 = 1
所以我们使用如下方法来标准化(Normalize)一个四元数:
q = q / ||q|| = q / sqrt(w2 + x2 + y2 + z2)

使用一个单位四元数来描述方向,请记住必须是单位四元数才可以描述方向。
3.四元数的乘法
因为一个单位四元数可以代表一个三维空间中的方向,那么两个四元数相乘得到的结果仍然是一个四元数,这个四元素依旧可以标识一个方向。

给定两个四元数:
Q1 = (w1, x1, y1, z1)
Q2 = (w2, x2, y2, z2)

Q1 * Q2 = (w1.w2 – v1.v2, w1.v2 + w2.v1 + v1 x v2)
注意:.代表向量间的点积,x代表叉积。v1=(x1, y1, z1)  v2=(x2, y2, z2)

优化一下:
w=w1w2 - x1x2 - y1y2 - z1z2
x = w1x2 + x1w2 + y1z2 - z1y2
y = w1y2 + y1w2 + z1x2 - x1z2
z = w1z2 + z1w2 + x1y2 - y1x2

4.四元数的转换
       为什么要转换,因为我们还不能直接使用四元数来进行3D物体的旋转。在OpenGL中和Direct3D中都是通过矩阵来描述3D旋转的。
4.1 四元数到矩阵的转换

使用单位四元数转换到矩阵:
Matrix = [ 1 - 2y2 - 2z2   2xy - 2wz      2xz + 2wy
             2xy + 2wz      1 - 2x2 - 2z2   2yz - 2wx
             2xz - 2wy      2yz + 2wx      1 - 2x2 - 2y2 ]

4.2 四元数到轴角的转换
轴角也是一种表达空间旋转的方式。
如果旋转轴是:(ax, ay, az)
旋转角度是:angle (单位:弧度)
那么四元数与轴角之间的转换关系如下:

angle = 2 * acos(w)
ax = x / scale
ay = y / scale
az = y / scale
其中scale = sqrt(x2 + y2 + z2)
  4.3 轴角到四元数的转换
假设旋转轴是(ax, ay, az),记得必须是一个单位向量。
旋转角度是theta. (单位:弧度)
那么转换如下:
w = cos(theta / 2 )
x = ax * sin(theta / 2)
y = ay * sin(theta / 2)
z = az * sin(theta / 2 )
  4.4 欧拉角到四元数的转换
如果你的欧拉角为(a, b, c)那么就可以形成三个独立的四元数,如下:

Qx = [ cos(a/2), (sin(a/2), 0, 0)]
Qy = [ cos(b/2), (0, sin(b/2), 0)]
Qz = [ cos(c/2), (0, 0, sin(c/2))]
最终的四元数是Qx * Qy * Qz的乘积的结果。


5.使用四元数来避免Gimbal Lock

基本思路如下:
1)  使用一个四元数来标识一个方向
2)  创建一个临时的四元数来标识当前方向到新方向的变化
3)  右乘临时的四元数和初始四元数,结果是一个合并了两个四元数的新的四元数
4)  将四元数转换成矩阵
6.更深入的学习四元数
SLERP:球状线性插值对于三位模型进行动画处理非常有用,因为这种方式在模型的各种方向之间提供了平滑的转换。
分享到:
评论

相关推荐

    四元数数学基础.pdf

    四元数是一种扩展复数的数学概念,它在三维空间中的应用尤其广泛,比如在计算机图形学、机器人技术、航空航天等领域,用于表示和计算三维空间中的旋转。四元数由一个实部和三个虚部构成,形式上可以表示为q = w + xi...

    论文研究四元数通用傅里叶描述子及其应用研究.zip

    总结来说,"论文研究四元数通用傅里叶描述子及其应用研究"的重点在于探讨如何利用四元数和傅里叶变换的结合来创建一种旋转不变的图像描述符,以提高图像处理和分析任务的性能。这种方法在处理旋转变化的图像时尤其...

    matlab开发-四元数

    以下将详细介绍四元数及其在MATLAB中的应用,并结合提供的文件名解析其可能包含的内容。 四元数是由三个虚部和一个实部组成的数学实体,通常表示为`q = w + xi + yj + zk`,其中w、x、y和z是实数,i、j、k是虚数...

    15 四元数MUSIC的MATLAB程序_四元数_music_

    四元数是数学中的一个扩展复数概念,由三个虚部和一个实部构成,表示为`q = w + xi + yj + zk`,其中`w, x, y, z`是实数,`i, j, k`是四元数的基元,满足`i^2 = j^2 = k^2 = ijk = -1`。四元数在三维旋转表示、图像...

    可视化理解四元数.zip

    总的来说,这个压缩包提供了深入理解四元数及其在自动驾驶中应用的资源。通过理论学习和可视化练习,学习者能够更好地掌握这一关键概念,并将其应用于实际的自动驾驶系统设计和开发中。对于那些致力于无人驾驶技术的...

    四元数之我见

    ### 四元数原理及其应用 #### 四元数简介 四元数是一种扩展了复数概念的数学工具,在三维空间中的旋转计算方面具有独特优势。相比于传统的欧拉角或旋转矩阵,四元数能够避免“万向锁”(Gimbal Lock)问题,并且在...

    ABB 机器人的欧拉角和四元数转化工具

    本教程将深入探讨这两种坐标表示及其相互转化在ABB机器人中的应用。 首先,欧拉角通常由三个旋转角度组成,如俯仰(Pitch)、偏航(Yaw)和翻滚(Roll),依次沿着Z、Y、X轴进行旋转。在ABB机器人中,欧拉角常用于...

    四元数完全解析及资料汇总

    #### 一、四元数定义及其与姿态角之间的关系 四元数作为一种扩展复数的概念,在三维空间姿态表示方面有着独特的优势。四元数不仅能够避免万向锁问题,而且在计算上比传统欧拉角更加高效稳定。 **定义**:四元数\( ...

    四元数解算姿态完全解析及资料汇总

    #### 一、四元数基础知识及其与姿态角的关系 **四元数定义** 四元数是一种扩展复数的概念,用于描述三维空间中的旋转。它由四个实数组成,通常表示为\( q = (q_0, q_1, q_2, q_3) \),其中\( q_0 \)为标量部分,\...

    translation of qua and euler and dcm.zip_attitude euler_四元数_四元数

    这个压缩包文件包含的六个函数显然与姿态表示的转换有关,下面将详细解释这些概念及其相互转换。 1. **姿态矩阵**:姿态矩阵(也称为旋转矩阵)是3x3的正交矩阵,用来表示三维空间中的刚体旋转。它具有单位行列式和...

    四元数与旋转变换.pdf

    通过学习笔记的形式,Charles007对四元数及其与旋转变换的关系进行了总结,涵盖了从基本概念到运算规则,再到实际应用的多方面内容。通过这样系统的梳理,学习者可以更加深入地理解四元数在图形图像处理中的作用,...

    四元数等超复数的解析与物理铨释

    本文主要探讨了四元数的多种数学表示方法及其在物理领域中的应用。 首先,文章提到四元数的九种表示形式,包括原始形式、一般代数形式、Pauli矩阵表示式、指数表示式、三角表示式等。这些表示形式各有其特点,可以...

    四元数与三维旋转.pdf

    文章的内容详尽地解释了四元数与三维旋转之间的数学原理,以及其在计算机图形学中的应用,特别是通过MATLAB/Octave代码和动画GIF的示例演示了这些数学概念的实际应用。尽管在写作过程中存在一些错误,并且文章并不...

    $$四元数解算姿态完全解析及资料汇总

    四元数是一种数学工具,广泛应用于三维空间的旋转表示,特别是在姿态解算中。它是由一个实部和三个虚部组成的四维...理解四元数的概念及其与姿态的关系,对于正确处理IMU数据并实现稳定、准确的三维姿态估计至关重要。

    基于面向对象的捷联惯导系统中四元数计算方法

    #### 二、四元数的基本概念及其在捷联惯导系统中的应用 ##### 2.1 四元数的基本概念 四元数是一种扩展了复数的概念,它由一个实部和三个虚部组成,可以表示为\( Q = q_0 + q_1i + q_2j + q_3k \),其中\( q_0 \)是...

    四元数quaternion

    本文旨在通过探讨复数(complex number)的基本概念及其与二维旋转的关系,进而深入介绍四元数的概念、性质以及其在三维旋转中的应用。 #### 二、复数与二维旋转 ##### 2.1 复数的基础 - **定义**: 任意一个复数\(z...

Global site tag (gtag.js) - Google Analytics