本系列文章由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) 维基百科

3D数学读书笔记——3D中的方位与角位移的更多相关文章

  1. 3D数学读书笔记——四元数

    本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/25400659 什么是四元数 ...

  2. 3D数学读书笔记——矩阵基础

     本系列文章由birdlove1987编写,转载请注明出处.    文章链接:http://blog.csdn.net/zhurui_idea/article/details/24975031   矩 ...

  3. 3D数学读书笔记——矩阵基础番外篇之线性变换

    本系列文章由birdlove1987编写.转载请注明出处. 文章链接:http://blog.csdn.net/zhurui_idea/article/details/25102425 前面有一篇文章 ...

  4. 3D数学读书笔记——向量运算及在c++上的实现

     本系列文章由birdlove1987编写.转载请注明出处.     文章链接: http://blog.csdn.net/zhurui_idea/article/details/24782661   ...

  5. 3D数学读书笔记——多坐标系和向量基础

    本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24662453 第一个知识点 ...

  6. 3D数学读书笔记——矩阵进阶

    本系列文章由birdlove1987编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhurui_idea/article/details/25242725 最终要学习矩阵 ...

  7. 3D数学学习笔记——笛卡尔坐标系

    本系列文章由birdlove1987编写.转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24601215 1.3D数学 ...

  8. 《编写可维护的javascript》读书笔记(中)——编程实践

    上篇读书笔记系列之:<编写可维护的javascript>读书笔记(上) 上篇说的是编程风格,记录的都是最重要的点,不讲废话,写的比较简洁,而本篇将加入一些实例,因为那样比较容易说明问题. ...

  9. 《Android源代码设计模式解析》读书笔记——Android中你应该知道的设计模式

    断断续续的,<Android源代码设计模式解析>也看了一遍.书中提到了非常多的设计模式.可是有部分在开发中见到的几率非常小,所以掌握不了也没有太大影响. 我认为这本书的最大价值有两点,一个 ...

随机推荐

  1. 组件化表单解决方案AForm 1.3 发布

    v1.3 更新日志 输入控件的实现改为实例化模式,同类型多个输入控件在同一个表单不会冲突 输入控件实现了继承 可以使用AForm.create创建表单,和使用new AForm创建实例的参数和结果一样 ...

  2. JDBC核心API

    JDBC核心API在java.sql.*和javax.sql.* 1.Driver接口:表示Java驱动程序接口,具体的数据库厂商要实现其此接口 connect(url.propertis):连接数据 ...

  3. 函数fgets和fputs、fread和fwrite用法小结(转)

    字符串读写函数fgets和fputs: 1.fgets()函数:原型char *fgets(char *s, int n, FILE *stream);从流中读取n-1(n默认1024)个字符之前,如 ...

  4. PowerTool x64驱动模块逆向分析(持续更新)

    比赛打完了,来继续搞了,因为那个主动防御正在写,所以想找找思路正好想到可以来逆向一下PT的驱动模块看看pt大大是怎么写的程序. PT x64版本的驱动模块是这个kEvP64.sys. 0x0 先来看看 ...

  5. java8 - 4

    import java.io.PrintStream; import java.util.Comparator; import java.util.function.BiFunction; impor ...

  6. 面试题49:把字符串转换成整数(atoi)

    需要考虑的问题都已在程序中注释 bool isValid; int StrToInt(const char* str) { isValid = false; //不合法情形1:空指针 if (str ...

  7. 程序设计实习MOOC / 程序设计与算法(一)第二周测验(2018春季)

    编程题: 1:对齐输出 总时间限制:  1000ms 内存限制:  65536kB 描述 读入三个整数,按每个整数占8个字符的宽度,右对齐输出它们. 输入 只有一行,包含三个整数,整数之间以一个空格分 ...

  8. USACO 6.3 Cowcycles

    CowcyclesOriginally by Don Gillies [International readers should note that some words are puns on co ...

  9. CentOS 7下安装Python3.6和pip

    一.安装python3.6 1.1.安装python3.6需要依赖包 yum install openssl-devel bzip2-devel expat-devel gdbm-devel read ...

  10. IOS和Android音频开发总结

    最近因为项目需要对声音进行变声,所以边学习边做,发现音频的处理思路并不难,但是做起来还是有些繁琐的(比预期的) 趁着脑子还发热,赶紧把思路总结一下,记录下来. 主要讲三个部分 1,如何变声2,安卓实现 ...