3D数学读书笔记——3D中的方位与角位移
本系列文章由birdlove1987编写,转载请注明出处。
文章链接: http://blog.csdn.net/zhurui_idea/article/details/25339595
方位和角位移的基本概念
什么是方位、角位移?
直观的说,我们知道,物体的“方位”主要描写叙述物体的朝向,然而,“方向”和“方位”并不全然一样。向量有“方向”但没有“方位”,差别在于,当一个向量指向特定方向时,能够让向量自转,但向量却不会发生不论什么变化,由于向量的属性仅仅有大小,而没有厚度和宽度。
然而,当一个物体朝向特定的方向时,让它和上面向量一样自转,我们就会发现物体的方位改变了。
从技术角度来讲,这就说明在3D中,仅仅要用两个參数,就能用參数表示一个方向。可是,要确定一个方位,至少须要三个參数。
描写叙述物体的方位时,不能使用绝对量。方位是通过于相对已知方位的旋转来描写叙述的。旋转的量称作角位移。换句话说,在数学上描写叙述方位就等价于描写叙述角位移。
ps:我们用矩阵和四元数来表示角位移,用欧拉角来表示方位。
方位表示
矩阵形式
3D中,描写叙述坐标系中方位的一种方法就是列出这个坐标系的基向量,这些基向量是用其它的坐标系来描写叙述的。用这些基向量构成一个3x3矩阵,然后就能用矩阵形式来描写叙述方位。也就是说,能用一个旋转矩阵来描写叙述两个坐标系之间的相对方位,然后用这个旋转矩阵把一个坐标系中的向量转换到还有一个坐标系中。
矩阵形式的长处:
1.能够马上进行向量的旋转。
2.矩阵的形式被图形API所用。
3.多个角位移连接。
矩阵形式的缺点:
1.矩阵占用很多其它的内存。
2.难于使用,不太直观。
3.矩阵可能是病态的(数据冗余)
四元数表示
四元数的“差”被定义为一个方位到还有一个方位的角位移。ps:上篇笔记中具体的记录的四元数的相关性质,这里就不在过多说明了。
四元数表示的长处:
1.平滑插值。
2.高速连接和角位移求逆。
3.能和矩阵形式高速转换。
4.仅有四个数,节省空间。
四元数表示的缺点:
1.比欧拉角略微大一些。
2.四元数可能不合法。
3.难于使用。
欧拉角
历史渊源:欧拉角著名的数学家Leonhard Euler的名字命名,他证明了角位移序列等价于单个角位移。
欧拉角的基本思想是将角位移分解为绕三个相互垂直轴的三个旋转组成的序列。随意的三个轴和随意的序列都能够,但最有意义的是使用笛卡尔坐标系并按一定顺序所组成的旋转序列。
欧拉角表示角位移的长处:
1.欧拉角对我们来说非常easy使用。
2.最简洁的表达方式。
3.随意三个数都是合法的。
欧拉角表示角位移的缺点:
1.给定的表达方式不唯一(旋转序列不唯一导致)。
2.两个角度间求插值很困难。
各方法比較
任务/性质 | 矩阵 | 欧拉角 | 四元数 |
在坐标系间旋转点 | 能 | 不能(必须转换到矩阵) | 不能(必须转换到矩阵) |
连接或增量旋转 | 能,但比四元数慢,会有矩阵蠕变 | 不能 | 能,比矩阵块 |
插值 | 基本上不能 | 能,但可能遭遇万向锁 | Slerp提供了平滑插值 |
易用程度 | 难 | 易 | 难 |
在内存或文件里的存储 | 9个数 | 3个数 | 4个数 |
对给定方位的表达式方式是否唯一 | 唯一 | 不唯一,对允许方位有无数种表示方法 | 不唯一,有两种表示方法,相互为负 |
可能导致非法 | 矩阵蠕变 | 随意三个数构成合法地欧拉角 | 可能出现差积累,从而产生非法的四元数 |
不同方位表示方法的建议:
1.欧拉角最easy使用。
2.假设须要在坐标系之间转换向量,那么就选择矩阵形式。
3.当须要大量保持方位数据时,就使用欧拉角或四元数。
4.平滑插值仅仅能用四元数来完毕。
-End-
參考文献: (1)《3D Math Primer for Graphics and Game Development》
(2) 维基百科