天行健 君子当自强而不息

3D中的方位和角位移

3D中的方位和角位移(8)      摘要: 为了将角位移从欧拉角转换到四元数,可以使用从欧拉角构造矩阵类似的方法。先将这三个旋转分别转换为四元数,这是一个简单的运算。再将这三个四元数连接成一个四元数。和矩阵一样,有两种情况需要考虑,第一种是惯性 -- 物体四元数,第二种是物体-- 惯性四元数。因为它们互为共轭关系,所以我们只推导惯性--物体四元数。 
 
3D中的方位和角位移(7)      摘要: 为了将角位移从四元数转换到矩阵形式,可以利用旋转矩阵,它能计算绕任意轴的旋转:

这个矩阵是用n和θ表示的,但四元数的分量是:

w = cos(θ/2)

x = nx sin(θ/2)

y = ny sin(θ/2)

z = nz sin(θ/2)  
 
3D中的方位和角位移(6)      摘要: Slerp提供了两个方位间的插值,当有多于两个的方位序列(它描述了我们想要经过的插值“路径”)时怎么办?我们可以在”控制点“之间使用slerp。类似于基本几何学中的线性插值,控制点之间是以直线连接的。显然,控制点上会有不连续性 ---- 这是我们想要避免的,我们给出squad(Spherical and Quadrangle)的公式,用来描绘控制点间的路径。

设控制点由四元数序列所定义:

q1,q2,q3,…qn-2,qn-1,qn  
 
3D中的方位和角位移(5)      摘要: 首先,让我们重写四元数的定义,引入一个新的变量α,等于半角θ/2:

α = θ/2

|| n || = 1

q = [cosα nsinα] = [cosα xsinα ysinα zsinα]  
 
3D中的方位和角位移(4)      摘要: 四元数能根据复数乘法解释来相乘,如下:

这导出了四元数乘法的标准定义,下面以两种四元数记法给出,见公式10.9:  
 
3D中的方位和角位移(3)      摘要: 一个四元数包含一个标量和一个3D向量分量,经常记标量分量为w,记向量分量为单一的v或分开的x、y、z。两种记法分别如下:

[w v]

[w, (x, y, z)]

在某些情况下,用v这样的短记法更方便,但在另一些情况下,"扩展"的记法会更清楚。

也可以将四元数竖着写,有时这会使等式的格式一目了然,"行"或"列"四元数没有明显的区别。  
 
3D中的方位和角位移(2)      摘要: 另一种描述方位的常用方法是欧拉角,这项技术以著名的数学家Leonhard Euler(1707 - 1783)的名字命名,他证明了角位移序列等价于单个角位移。

欧拉角的基本思想是将角位移分解为绕三个互相垂直轴的三个旋转组成的序列。这听起来很复杂,其实它是非常直观的(事实上,易于使用正是它的主要优点之一)。之所以有"角位移"的说法正是因为欧拉角能用来描述任意旋转。 
 
3D中的方位和角位移(1)      摘要: 直观地说,我们知道物体的“方位”主要描述的是物体的朝向。然而“方向”和“方位”并不完全一样。向量有“方向”但没有“方位”,区别在于,当一个向量指向特定方向时,可以让向量自转(如图10.1所示),但向量(或者说它的方向)却不会有任何变化,因为向量的属性只有“大小”,而没有“厚度”和“宽度”。 

posted on 2008-02-16 12:52 lovedday 阅读(2212) 评论(0)  编辑 收藏 引用 所属分类: ■ 3D Math Basis


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

导航

统计

常用链接

随笔分类(178)

3D游戏编程相关链接

搜索

最新评论