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

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

阅读更多

Computer Graphics: 四元數與旋轉
在討論「四元數」之前,我們來想想對三維直角座標而言,在物體旋轉會有何影響,可以擴充三維直角座標系統的旋轉為三角度系統(Three-angle system),在Game Programming Gems中有提供這麼一段:

Quaternions do not suffer from gimbal lock. With a three-angle(roll, pitch, yaw) system, there are always certain orientations in which there is no simple change to the trhee values to represent a simple local roation. You often see this rotation having "pitched up" 90 degree when you are trying to specify a local yaw for right.


簡單的說,三角度系統無法表現任意軸的旋轉,只要一開始旋轉,物體本身即失去對任意軸的自主性。

四元數(Quaternions)為數學家Hamilton於1843年所創造的,您可能學過的是複數,例如:a + b i 這樣的數,其中i * i = -1,Hamilton創造了三維的複數,其形式為 w + x i + y j + z k,其中i、j、k的關係如下:


i2 = j2 = k2 = -1
i * j = k = -j * i
j * k = i = -k * j
k * i = j = -i * k


假設有兩個四元數:


q1 = w1 + x1 i + y1 j + z1 k
q2 = w2 + x2 i + y2 j + z2 k


四元數的加法定義如下:


q1 + q2 = (w1+w2) + (x1+x2) i + (y1+y2) j + (z1+z2) k


四元數的乘法定義如下,利用簡單的分配律就是了:


q1 * q2 =

(w1*w2 - x1*x2 - y1*y2 - z1*z2) +
(w1*x2 + x1*w2 + y1*z2 - z1*y2) i +
(w1*y2 - x1*z2 + y1*w2 + z1*x1) j +
(w1*z2 + x1*y2 - y1*x2 + z1*w2) k


由於q = w + x i + y j + z k中可以分為純量w與向量x i + y j + z k,所以為了方便表示,將q表示為(S, V),其中S表示純量w,V表示向量x i + y j + z k,所以四元數乘法又可以表示為:


q1 * q2 = (S1 + V1)*(S2 + V2) = S1*S2 - V1.V2 + V1XV2 + S1*V2 + S2*V1

其中V1.V2表示向量內積,V1XV2表示向量外積。

定義四元數q = w + x i + y j +z k 的norm為:


N(q) = |q| = x2 + y2 + z2 + w2


滿足N(q) = 1的四元數集合,稱之為單位四元數(Unit quaternions)。

定義四元數定義四元數q = w + x i + y j +zk的共軛(Conjugate)為:


q* = 定義四元數q = w - x i - y j -z k = [S - V]


定義四元數的倒數為:


1/ q = q* / N(q)


說明了一些數學,您所關心的或許是,四元數與旋轉究竟有何關係,假設有一任意旋轉軸的向量A(Xa, Ya, Za)與一旋轉角度θ,如下圖所示:



若令q = [S, V] = [cosθ, u*sinθ],其中u為單位向量,而令q'= [S', V']為一四元數,則經過導證,可以得出q * q' * q^(-1)會使得q'繞著u軸旋轉2θ。

由四元數的矩陣乘法與四元數的旋轉,可以導證出上面的旋轉公式可以使用以下的矩陣乘法來達成:



講了這麼多,其實就是要引出上面這個矩陣乘法,也就是說如果您要讓向量(x', y', z')(w'為0)對某個單位向量軸u(x, y, z)旋轉角度2θ,則w = cosθ,代入以上的矩陣乘法,即可得旋轉後的(x", y", z"),如果為了方便,轉換矩陣的最下列與最右行會省略不寫出來,而如下所示:







  • 大小: 9.8 KB
  • 大小: 18.5 KB
  • 大小: 15 KB
分享到:
评论

相关推荐

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

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

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

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

    四元数与旋转变换.pdf

    复数的加减乘除运算遵循特定的规则,其中特别注意的是乘法部分,因为涉及到虚部单位向量i=(0, 1),它满足i^2 = (0, 1)(0, 1) = (-1, 0)。利用这一性质,可以将复数(a, b)表示为a + bi的形式。复数还可以用极坐标形式...

    Jia - Quaternions and Rotations 四元数与旋转

    四元数由一个实部和三个虚部构成,通常表示为q = w + xi + yj + zk,其中w、x、y、z是实数,i、j、k是四元数的基元,满足i²=j²=k²=ijk=-1。四元数的加法和减法操作类似于复数,而乘法规则则是非共轭对称的,这...

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

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

    四元数与三维旋转.pdf

    复数由实部和虚部组成,通常表示为a+bi的形式,其中a是实部,b是虚部,而i是虚数单位,满足i²=-1。复数的加减法基于分量相加相减的原则,而乘法则更为复杂,涉及到了虚数单位的平方性质。复数乘法可以与矩阵与向量...

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

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

    四元数数学基础.pdf

    四元数由一个实部和三个虚部构成,形式上可以表示为q = w + xi + yj + zk,其中i、j、k是三个虚部单位,它们满足特定的乘法规则:i² = j² = k² = ijk = -1。 四元数的定义及其属性涵盖了以下知识点: 1. 四元数...

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

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

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

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

    四元数Quaternion控制人物旋转

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

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

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

    旋转矩阵与四元数互算

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

    四元数与三维旋转1

    总的来说,四元数提供了一种高效且无 gimbal lock 问题的方式来描述三维空间中的旋转。它们与复数、向量和矩阵的关系揭示了数学在解决实际问题中的灵活性和威力。理解这些概念对于理解和应用四元数在各种领域中的...

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

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

    四元数MATLAB工具箱

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

    四元数运算与旋转矩阵库

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

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

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

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

    一个四元数由一个实部和三个虚部组成,通常表示为\( q = w + xi + yj + zk \),其中\( w, x, y, z \)是实数,\( i, j, k \)是满足特定乘法规则的虚单位,即\( i^2 = j^2 = k^2 = ijk = -1 \)。四元数的主要优势在于...

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

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

Global site tag (gtag.js) - Google Analytics