本系列文章由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. 关闭linux退格键和vi发出的嘟嘟声

    以root用户登录,然后请安下面方法进行操作: 在命令行下执行:echo "rmmod pcspkr" >> /etc/rc.d/rc.local

  2. mysql 导出数据库命令

    mysqldump --socket=/data/mysql/mysql.sock -uroot -pfanzhuo -d stat1> stat1.sql

  3. 使用 ResponseBodyAdvice 拦截Controller方法默认返回参数,统一处理返回值/响应体

    使用 @ControllerAdvice & ResponseBodyAdvice 拦截Controller方法默认返回参数,统一处理返回值/响应体 1.Controller代码 以下是Con ...

  4. Activity总结练习

    package com.example.wang.myapplication; import android.content.Intent; import android.os.Bundle; imp ...

  5. MFC+WinPcap编写一个嗅探器之七(协议)

    这一节是本系列教程的结尾了,内容也比较简单,主要是对网络协议进行分析,其实学过计算机网络的同学完全可以略过 在整个项目中需要有一个头文件存放各层协议的头部定义,我把它们放在了head.h中,这个头文件 ...

  6. 【LOJ】#2443. 「NOI2011」智能车比赛

    题解 显然是个\(n^2\)的dp 我们要找每个点不穿过非赛道区域能到达哪些区域的交点 可以通过控制两条向量负责最靠下的上边界,和最靠上的下边界,检查当前点在不在这两条向量之间即可,对于每个点可以\( ...

  7. USACO 6.2 Packing Rectangles

    Packing RectanglesIOI 95 The six basic layouts of four rectangles Four rectangles are given. Find th ...

  8. gluster学习(一)

    2)Bricks • Brick是一个节点和一个导出目录的集合,e.g. node1:/brick1 • Brick是底层的RAID或磁盘经XFS或ext4文件系统格式化而来,所以继承了文件系统的限制 ...

  9. Django实战(16):Django+jquery

    现在我们有了一个使用json格式的RESTful API,可以实现这样的功能了:为了避免在产品列表和购物车之间来回切换,需要在产品列表界面显示购物车,并且通过ajax的方式不刷新界面就更新购物车的显示 ...

  10. 006 ajax验证用户名

    1.大纲 2.index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8&qu ...