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) 维基百科
3D数学读书笔记——3D中的方位与角位移的更多相关文章
- 3D数学读书笔记——四元数
本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/25400659 什么是四元数 ...
- 3D数学读书笔记——矩阵基础
本系列文章由birdlove1987编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhurui_idea/article/details/24975031 矩 ...
- 3D数学读书笔记——矩阵基础番外篇之线性变换
本系列文章由birdlove1987编写.转载请注明出处. 文章链接:http://blog.csdn.net/zhurui_idea/article/details/25102425 前面有一篇文章 ...
- 3D数学读书笔记——向量运算及在c++上的实现
本系列文章由birdlove1987编写.转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24782661 ...
- 3D数学读书笔记——多坐标系和向量基础
本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24662453 第一个知识点 ...
- 3D数学读书笔记——矩阵进阶
本系列文章由birdlove1987编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhurui_idea/article/details/25242725 最终要学习矩阵 ...
- 3D数学学习笔记——笛卡尔坐标系
本系列文章由birdlove1987编写.转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24601215 1.3D数学 ...
- 《编写可维护的javascript》读书笔记(中)——编程实践
上篇读书笔记系列之:<编写可维护的javascript>读书笔记(上) 上篇说的是编程风格,记录的都是最重要的点,不讲废话,写的比较简洁,而本篇将加入一些实例,因为那样比较容易说明问题. ...
- 《Android源代码设计模式解析》读书笔记——Android中你应该知道的设计模式
断断续续的,<Android源代码设计模式解析>也看了一遍.书中提到了非常多的设计模式.可是有部分在开发中见到的几率非常小,所以掌握不了也没有太大影响. 我认为这本书的最大价值有两点,一个 ...
随机推荐
- 本地为Windows,使用Xshell登录Linux云主机
以某东的云主机为实例 1. 下载并安装远程登录软件 下载Xshell软件 下载后双击xshell5_5.0.1332.exe进行安装 2. 安装完成,打开Xshell,并点击新建,根据要求输入相应参数 ...
- HDU 4763 Theme Section(KMP+枚举公共前后缀)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4763 题目大意: 给你一个字符串s,存在一个子串E同时出现在前缀.中间.后缀,即EAEBE这种模式,A ...
- Oracle学习笔记:wm_concat函数合并字段
在Oracle中使用wm_concat(column)可以实现字段的分组合并,逗号分隔. 例如,现有表temp_cwh_test: -- 创建临时表 create table temp_cwh_tes ...
- MySQL学习笔记:新增一列
1.在一个已建好的表中,最后一列位置添加一列,可使用: ALTER TABLE aa_numbers_small ADD COLUMN date_time DATE NOT NULL; 2.添加一列到 ...
- 一个文件系统过滤驱动的demo
因为没写过FSD过滤驱动,所以拿来练练手,没有什么技术含量.参考自Win内核安全与驱动开发. 先梳理一下大概的流程,就是怎么去绑定设备栈.怎么去过滤各种请求的. 首先肯定是要绑定设备栈的,来看下怎么绑 ...
- 20165333实验三 敏捷开发与XP实践
实验内容 一.参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECCODESTANDARD 安装alibaba 插件,解决代码中的规范问题. 在IDE ...
- 20165333 2016-2017-2 《Java程序设计》第1周学习总结
20165333 2016-2017-2 <Java程序设计>第1周学习总结 教材学习内容总结 java 的地位 Java 的特点 安装JDK 系统环境的设置 Java程序的编写,编译和运 ...
- 利用Octopress在github pages上搭建个人博客
利用Octopress在github pages上搭建个人博客 SEP 29TH, 2013 在GitHub Pages上用Octopress搭建博客,需要安装ruby环境.git环境等.本人在Fed ...
- 【LOJ】#2205. 「HNOI2014」画框
题解 我原来根本不会KM 更新每个节点增加的最小值的时候,要忽略那个方访问过的右节点!!! 然后就和最小乘积生成树一样了 代码 #include <iostream> #include & ...
- Haproxy 开启日志记录
CentOS 7上yum安装的Haproxy,默认没有记录日志.需要做一下配置才能记录日志.(不知道其他版本是否需要,已经忘记了)主要是用到了Haproxy,以前貌似没有这么麻烦,今天配置出了一些问题 ...