`
roc08
  • 浏览: 228013 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[转]四元数与旋转问题--网上找来的资料3

阅读更多
在3D程序中,通常用quaternion来计算3D物体的旋转角度,与Matrix相比,quaternion更加高效,占用的储存空间更小,此外也更便于插值。在数学上,quaternion表示复数w+xi+yj+zk,其中i,j,k都是虚数单位:

i*i = j*j = k*k= -1
i*j = k, j*i = -k

可以把quaternion看做一个标量和一个3D向量的组合。实部w表示标量,虚部表示向量标记为V,或三个单独的分量(x,y,z)。所以quaternion可以记为[ w, V]或[ w,(x,y,x)]。对quaternion最大的误解在于认为w表示旋转角度,V表示旋转轴。正确的理解应该是w与旋转角度有关,v与旋转轴有关。例如,要表示以向量N为轴,轴旋α度,相对的quaternion应该是:
q = [ cos(α/ 2) , sin(α/ 2) N]
  =[ cos(α/ 2) , ( sina(α/ 2) Nx, sin(α/ 2)Ny, sin(α/ 2)Nz ) ]

为了计算方便,一般要求N为单位矢量。对quaternion来说使用四个值就能记录旋转,而不是Matrix所需的十六个值。为什么用quaternion来计算旋转很方便呢?先说过quaternion是一个复数,如果你还记得一点点复数的知识,那么应该知道复数乘法(叉乘)的几何意义实际上就是对复数进行旋转。对最简单的复数p= x + yi来说,和另一个复数q = ( conα,sinα)相乘,则表示把p沿逆时针方向旋转α:
p’ = pq
当然,x+yi的形式只能表示2D变换,对3D变换来说就需要使用 quaternion了,而且计算也要复杂一点。为了对3D空间中的一个点p(x,y,z)进行旋转,需要先把它转换为quaternion形式p = [0, ( x, y, z)],接下来前面讨论的内容,定义q = cos(α/ 2) , sin(α/ 2) N为旋转quaternion,这里N为单位矢量长度的旋转轴,α为旋转角度。那么旋转之后的点p’则为:
       p’ = qpq-1

分享到:
评论

相关推荐

    四元数和旋转矩阵相互转化的算法实现

    讲述四元数和旋转矩阵之间相互转化的学术论文:首先介绍了四元数和旋转矩阵在实现向量旋转中的应用,在此基础上,根据游戏开发的实际需要,讨论了四元数和旋转矩阵之间的相互转化关系。最后,重点分析了由旋转矩阵到...

    四元数与旋转矩阵详细推导过程

    四元数与旋转矩阵详细推导过程 在了解四元数(Quaternion)与三维旋转之间的关系之前,我们需要了解复数(Complex ...在下一章中,我们将会讨论四元数与旋转矩阵之间的关系,并探讨如何使用四元数来表示三维旋转。

    四元数与旋转变换.pdf

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

    Jia - Quaternions and Rotations 四元数与旋转

    翻译“Jia - Quaternions and Rotations”可能会涵盖四元数的更多理论细节,如四元数的代数性质、四元数的几何解释、四元数与旋转矩阵的转换、四元数的逆和除法等。通过学习这部分内容,你可以深入理解四元数如何在...

    三维旋转-四元数-万向锁介绍.zip

    总的来说,"三维旋转-四元数-万向锁介绍.zip"压缩包提供的资源旨在帮助读者深入理解三维旋转中的万向锁问题,以及如何利用四元数来克服这一难题。通过学习四元数的数学原理,以及如何在实际项目中使用它们,可以显著...

    四元数与三维旋转.pdf

    在详细解释四元数之前,本文首先介绍了复数及其与二维旋转的关系,因为复数是理解四元数性质的基础。 复数由实部和虚部组成,通常表示为a+bi的形式,其中a是实部,b是虚部,而i是虚数单位,满足i²=-1。复数的加...

    四元数数学基础.pdf

    四元数是一种扩展复数的数学概念,它在三维空间中的应用尤其广泛,比如在计算机图形学、机器人技术...理解四元数的结构和运算法则需要一定的抽象思维能力,但一旦掌握,就可以在各种场合下高效地使用四元数来处理问题。

    python将四元数变换为旋转矩阵的实例

    四元数是数学中的一个概念,是一种抽象的代数结构,也是三维空间中旋转的另一种表示方法,它避免了欧拉角可能出现的万向锁问题。四元数包括一个实部和三个虚部,通常表示为q = (w, x, y, z),其中w是实部,x、y、z是...

    程序:四元数欧拉角旋转向量旋转矩阵变换transform.cpp

    代码!!!!重要!!!! 学习中关于机器人领域中四元数、欧拉角、旋转矩阵、旋转向量的相互转换关系总结,整理加深记忆。 每一个都有相互转换关系,并注释

    旋转矩阵与四元数互算

    旋转矩阵R通常是3x3的形式,具有inv(R)=trans(R)的性质,即R的逆就是...本案记四元数Q[0]-Q[3],其中Q[0]与旋转的幅度有关,其余三数与旋转轴有关。本例子给出了四元数与欧拉角以及与旋转矩阵互换的代码。希望对各位有用。

    四元数与三维旋转知识.pdf

    这篇文章的主要目的就是简单讨论一下四元数(Quaternion)与三维旋转之间的关系.简介:虽然网上四元数相关的资料有很多了,但是我好像一直没找到令我满意的,所以就想自己来写一篇.目前很多资料都使用了比较抽象的方式来...

    四元数Quaternion控制人物旋转

    文章Unity3D学习笔记05:四元数控制人物旋转的脚本代码

    欧拉角、四元数与旋转向量

    ### 欧拉角、四元数与旋转向量 #### 概述 在三维空间中,物体的旋转可以通过多种方式进行表示,其中最为常见的三种方式是:欧拉角(Euler Angles)、四元数(Quaternions)以及旋转向量(Rotation Vectors)。这三...

    四元数MATLAB工具箱

    - 四元数旋转:在三维空间中,四元数可以用来表示旋转,其优点在于没有 gimbal lock(万向锁)问题。通过四元数乘法,可以实现对向量的旋转操作。 - 旋转矩阵与四元数转换:四元数工具箱提供函数将旋转矩阵转换为...

    四元数与三维旋转插值运算

    为了更好地理解四元数与三维旋转之间的关系,先让我们从复数开始说起,因为四元数的很多性质和它们与二维旋转的关系,与复数有诸多相似之处。 复数是由实数和虚数构成的,其中虚数单位i定义为√(-1),所以任何复数z...

    四元数运算与旋转矩阵库

    包含四元数的基本运算,矩阵的基本运算,四元数、欧拉角、旋转矩阵之间的相互转换

    图形学旋转控制-欧拉角与四元数.rar

    四元数的优势在于它的运算不仅避免了奇异性问题,还能在保证旋转准确的前提下,进行快速的计算,这在实时图形渲染中尤为重要。因此,在诸如OpenGL和Direct3D这样的图形学引擎和库中,四元数被广泛使用。然而,四元数...

    刚体不稳定自由旋转的简单MATLAB仿真-SpinSpin-四元数- v2-MATLAB

    旋转物体运动学是基于“标量第一单位四元数”的。 项目“SpinSpin_Quaternion_v1”与此项目类似。 项目“SpinSpin_RotationVector”与此项目类似,但基于“RotationVector”。 标量第一单位四元数定义: 标量第...

    四元数、旋转矢量原理及推导

    四元数的主要优势在于它可以简洁地表示三维空间中的非对称旋转,避免了旋转矩阵在处理连续旋转时可能出现的 gimbal lock(万向节锁)问题。 旋转矢量,又称欧拉轴角,是一种将三维旋转表示为一个向量和一个旋转角度...

    四元数到欧拉角转换:使用 ZYX 旋转序列将四元数转换为欧拉角-matlab开发

    将四元数转换为欧拉角。 请注意,不同旋转顺序的欧拉角是不同的。 此代码中使用的欧拉角旋转顺序是 z-y'-x''(偏航、俯仰、滚转)。 旋转是固有的,即沿新轴旋转。 这个定义被航空航天工程师广泛使用。 参考: ...

Global site tag (gtag.js) - Google Analytics