3D数学与游戏:四元数与旋转

原创 2007年10月01日 23:45:00

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"),如果为了方便, 转换矩阵的最下列与最右行会省略不写出来,而如下所示:

============================================================

你妈B,你脑子有病啊,你把1×3和1×4距阵写成3×1和4×1距阵了!!

大家不要受误导啊!!坐标距阵应当是这样的哦:

[ X,Y,Z ]和[ X,Y,Z,W ]

因为距阵乘法只能是:

[ M×N ] [ N×P ] = [ M×P ]  --> 两个N一定要一样呀!!

并且2D距阵&3D距阵只有结合率没有交换率!!

不信,大家可以自己找资料看啊,antimatterworld从来不

骗人哦~~

 

四元数(Quaternion)和旋转

四元数介绍 旋转,应该是三种坐标变换——缩放、旋转和平移,中最复杂的一种了。大家应该都听过,有一种旋转的表示方法叫四元数。按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法——矩阵旋转和欧拉旋转...
  • wang15061955806
  • wang15061955806
  • 2016年03月31日 19:07
  • 4757

四元数与旋转

如何描述三维空间中刚体的旋转,是个有趣的问题。具体地说,就是刚体上的任意一个点P(x, y, z)围绕过原点的轴(i, j, k)旋转θ,求旋转后的点P\'(x\', y\', z\')。 旋转...
  • carmazhao
  • carmazhao
  • 2014年10月11日 11:01
  • 40418

旋转变换(三)四元数

简要介绍了四元数的概念和基本运算,以及如何构造一个用来描述三维旋转的四元数...
  • csxiaoshui
  • csxiaoshui
  • 2017年03月29日 11:59
  • 1069

旋转矩阵与四元数

在计算机图形学的学习中,几何变换(Transformations)是一块重要的内容,我们使用齐次坐标(Homogeneous coordinates)描述点和向量,使用变换矩阵描述平移、旋转等变换。 ...
  • l281865263
  • l281865263
  • 2015年08月24日 12:49
  • 8611

旋转矩阵与四元数

点我进入原文 在计算机图形学的学习中,几何变换(Transformations)是一块重要的内容,我们使用齐次坐标(Homogeneous coordinates)描述点和向量,使用变换矩阵描述平...
  • zhyh1435589631
  • zhyh1435589631
  • 2017年01月16日 09:16
  • 944

【Unity技巧】四元数(Quaternion)和旋转

旋转,应该是三种坐标变换——缩放、旋转和平移,中最复杂的一种了。大家应该都听过,有一种旋转的表示方法叫四元数。按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法——矩阵旋转和欧拉旋转。矩阵旋转使用...
  • candycat1992
  • candycat1992
  • 2014年11月23日 11:30
  • 195626

四元数与旋转——学习笔记(三)

四元数与旋转——学习笔记(一) 四元数与旋转——学习笔记(二) 四元数与旋转——学习笔记(三)五、四元数的微分和积分假设前面公式(1)给出的四元数是时间 tt 的函数。则对 q(t)q(t) 求导...
  • u013236946
  • u013236946
  • 2017年06月01日 15:05
  • 1339

3D中的旋转,四元数

[+] 四元数 一 四元数 11 四元数的概念12 旋转矩阵12 欧拉角13    旋转矩阵欧拉角和四元数之间的转化关系14    线性插值与球面插值 二 参考 3     ...
  • KHFlash
  • KHFlash
  • 2018年01月07日 11:06
  • 41

四元数定义三维旋转

四元数(Quaternion)是由爱尔兰数学家 哈密顿(Hamilton)在1843年发明的概念。四元数的乘法不符合交换律(commutative law)。         四元数 可以描述为 (...
  • linolzhang
  • linolzhang
  • 2017年02月17日 23:26
  • 418

坐标系旋转关系描述 -- 四元数

在看ROS的TF时发现其描述旋转关系有2种方式:欧拉角和四元数 感觉四元数和罗德里格斯变换有点像,都是直接用一个向量描述旋转轴,不过后者用向量的模表示旋转角度,因此只有3个值。 以下内容转...
  • zizi7
  • zizi7
  • 2016年04月28日 14:28
  • 3770
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:3D数学与游戏:四元数与旋转
举报原因:
原因补充:

(最多只允许输入30个字)