3D Maths

浏览量:5,066

三维旋转

本篇文章谢绝转载,也禁止用于任何商业目的。 代码的下载地址为:https://github.com/twinklingstar20/orientation 本篇文章主要介绍三维空间下旋转的三种表示形式:四元数、矩阵和欧拉角,阐述了四元数、矩阵的数学原理和实现,在附录中描述了与四元数类和矩阵类相关的向量类的实现策略。三种旋转表示形式的优缺点对比,参见文章《欧拉角、四元数和矩阵的对比》。 特别说明:向量类、四元数类、矩阵类的实现,是由NVIDIA公司Physx物理引擎开源部分的源码修改而来的。 1. 四元数 四元数(Quaternion)是由爱尔兰数学家威廉•卢云•哈密顿在1843年发现的数学概念,在图形学中有重要的应用。在3D程序中,通常用四元数来计算3D物体的旋转角度,与矩阵相比,四元数更加高效,占用的储存空间更小,此外也更便于插值。 任意一个四元数可以表示为: (1)   其中,,注意,但是。四元数的长度(模长)表示为,通常将四元数规一化(Normalized),即: (2)   四元数本质上是复数(Complex Number),复数就存在一个共轭的概念。若两个复数的实部相等,虚部互为相反数,则称这两个复数互为共轭(Conjugate),的共轭复数表示为: (3)   四元数间的运算,遵循复数间运算法则。 加减法: (4)   与系数的乘积: (5)   点积: (6)   四元数间的点积与向量点积相似,也可以计算四元数之间的角度差,即: (7)   四元数间的乘积不遵守交换律,表示为: (8)   等式展开得: (9)   其中,。 任意一个四元数可以分解为向量和标量两部分,即,则两个四元数的乘积有下列等式成立,具体的推导参见: (10)  

spacer
浏览量:1,698

坐标系统的变换

本文主要介绍图形学中坐标系统变换的理论基础。 图1. 坐标系统的变换 以二维为例,如图1所示。设坐标系统,原点在,两条坐标轴分别为,点在坐标系统上的坐标为;类似的,点在坐标系统上的坐标为。设坐标轴,原点经过一个矩阵变换,得到坐标系统的坐标轴和原点,即有: (1)   那么,坐标与之间的关系可以表示为(齐次表示,参见文章《齐次表示》): (2)   注意,等式(1)右侧分别为坐标系统的坐标表示和原点,但是等式(2)的右侧却是坐标系统的坐标信息,这里简单阐述下推导过程: 1. 由坐标系统的坐标表示有: (3)   2. 把(1)代入(3),可以得到:     3. 又,易知等式(2)成立。 进一步,我们可以拓展下坐标系统变换的问题,设有个连续的坐标系统变换,它们满足条件:     其中,。 由上述的推导,我们易知: (4)   再进一步,扩展为三维空间下坐标系统的变换,类似的等式也成立,不再赘述。 图2. 在世界坐标系中的照相机示意图 最后,介绍个图形学中坐标系统变换的实例(这里采用右手坐标系),将坐标由世界坐标系统变换至视点坐标系统,如图2所示,参见《OpenGL原理介绍》。在世界坐标系统下,照相机位于坐标,照相机向着方向观察场景,照相机垂直向上的方向为,因此照相机的配置信息能构造一个视点坐标系统,令,则该视点坐标系统的三条坐标轴分别对应,原点位于。设空间中有一个点,它在世界坐标系下的坐标表示为,它在视点坐标系统下的坐标表示为。结合等式(1)(2)易知,存在一个的齐次矩阵,使得: (5)   则有等式: (6)   由等式(5)且,可以推导出矩阵为: (7)   易知,为:

spacer
浏览量:1,232

齐次表示

齐次表示在图形学中占有非常重要的位置。点表示三维空间中的一个位置,向量表示一个方向,没有具体的位置。使用的矩阵,可以对坐标进行仿射变换,比如旋转、缩放以及错切变换等,然而使用这种矩阵并不能进行平移变换。点的平移是有意义的,但是向量的平移是没有意义的。 简单来说,在三维空间上,点和向量的表示都是3维的,把扩展1维,就得到齐次向量表示,即。若为零,表示一个三维向量;若非零,则表示点。 齐次向量扩展1维,那么原先由的矩阵表示的变换也需要扩展1维,变成的齐次矩阵。的齐次矩阵可以实现旋转、缩放和错切变换,形式为:     矩阵不能表示的位移变换,也可以采用的齐次矩阵来表示     易知,若是一个向量,则得到的结果仍等于,因为向量的位移是没有意义的。 图1. 点的透视投影 齐次表示除了能表表三维空间上所有的仿射变换(两条互相平面的直线,变换后,仍然互相平行),还可以表示透视变换,参见文章《OpenGL原理介绍》,如图1所示。一个点投影到照相机的近平面上,是在轴的负方向上,表示投影平面到源点的距离,则有,则,同理,有,即: 透视变换不能把深度信息给丢弃掉,所以图形学里面引入了伪深度的概念,来表示,透视变换后的坐标为: 其中,。 我们很容易用4×4的齐次矩阵来表示透视变换,如下所示:     的齐次矩阵既可以表示仿射变换也可以表示透视变换,大大简化了硬件的设计要求,图形学中起到了非常重要的位置。    

spacer
浏览量:7,463

欧拉角、四元数和矩阵的对比

三维空间的旋转可以用欧拉角,旋转矩阵,轴-角,四元数,双四元数来表示,本文主要总结这些表示方法的优缺点。 一.  欧拉角(Euler-Angles) 1.1    介绍 欧拉角包括3个旋转,根据这3个旋转来指定一个刚体的朝向。这3个旋转分别绕x轴,y轴和z轴,分别称为Pitch,Yaw和Roll,如下图所示。欧拉角可以表示成z-x-z,x-y-x,z-y-z等形式,旋转的顺序影响结果。 Pitch Yaw Roll 图1. 欧拉角的表示 欧拉角很重要的一个优点就是直观,容易理解。 欧拉角主要有下面几个缺点: (1)       欧拉角是不可传递的,旋转的顺序影响旋转的结果,不同的应用又可能使用不同的旋转顺序,旋转顺序无法统一; (2)       3个旋转的角度可以不受限制,即可以是10000度,也可以是-1500度; (3)       可能造成万向节死锁(Gimbal Lock)。 1.2 平万向节死锁 当两个环发生重叠的时候,就有丢失了一个自由度,如图2所示。对万向节死锁可以参考【1】【2】【3】,特别是【1】提供的视频,对知识点的介绍非常的形象生动。也正是由于锁的存在,无法使用欧拉角实现球面平滑的插值。 图2. 万向节死锁 二. 旋转矩阵 用3*3的矩阵,可以表示三维空间中所有的旋转,设表示沿着轴的方向望去时,方向是顺时针的旋转角度。则绕着X轴、Y轴、Z轴旋转角,对应的旋转矩阵表示如下所示:    旋转矩阵支持传递性,使用起来很简单方便,但是存在下面一些缺点: (1)       浪费内存,至少需要12个参数,来表示一个6个自由度的结构; (2)       可能就引入不该有的缩放(Scaling)和错切(Sheering) (3)       矩阵插值的实现难度很大; (4)       不直观。 三.  轴–角度 绕着单位长度的轴旋转某个角度,使用组合对。 该方向很直观,避免了欧拉角使用时的万向节死锁;但是实现多个旋转的组合时,比较困难;不能简单的通过对4个元素的线性插值来实现轴-角度的插值,会引起错误。

spacer
浏览量:1,157

任意点与平面的反射矩阵

问题描述:设三维空间上,存在一个点,一个平面,求点经过平面的投影点,其中,,,如图1所示。 图1. 点是点经过平面的投影点 设表示点到平面的有向距离,则有: 由于点和点到平面的距离大小相等,且垂直于平面,则有: 把(1)代入(2)式中,得到: 设点和点分别用齐次坐标表示(参见《齐次表示》),则,,那么等式(3)可以表示成齐次矩阵与齐次坐标乘积的形式,即,则为:   (4)  

spacer
浏览量:34,875

四元数

重新看了三年前写的文章,感觉很多叙述并不到位,重新更新了一篇博客《三维旋转》,里面有更加清晰的介绍。 对于四元数的概念也许大家不太熟悉,这里介绍下四元数概念,四元数、矩阵和欧拉角之间的关系,四元数球面插值的概念。 一. 四元数 1.1 四元数的概念 四元数是由爱尔兰数学家威廉•卢云•哈密顿在1843年发现的数学概念,在图形学中有重要的应用。在3D程序中,通常用四元数来计算3D物体的旋转角度,与矩阵相比,四元数更加高效,占用的储存空间更小,此外也更便于插值。 可以把四元数看做一个标量和一个3D向量的组合。实部w表示标量,虚部表示向量标记为V或三个单独的分量(x,y,z),则四元数可以记为或。正规化四元数可以表示为: 在三维中,可以用四元数表示绕着某个轴的旋转,如下公式所示: α表示旋转的角度,cos(βx), cos(βy) 和cos(βz)表示定位旋转轴的方向余弦 根据欧拉旋转定理,任何两个坐标系的相对定向,可以由一组四个数字来设定;其中三个数字是方向余弦,用来设定特征矢量(固定轴);第四个数字是绕着固定轴旋转的角值。这样四个数字的一组称为四元数。上面这段话阐述了四元数的原理:三维空间内所有的旋转都可以用四个数来表示。在通过四元数方法来计算旋转,已经替代了方向余弦方法,这是因为它能减少所需的工作,和它能减小舍入误差。在电脑图形学里,四元数与四元数之间,简易执行插值的能力是很有价值的。 1.2 旋转矩阵 旋转矩阵(Rotation Matrix)与一个向量相乘,会改变向量的方向但不改变大小的效果。旋转可分为主动旋转与被动旋转。主动旋转是指将向量逆时针围绕旋转轴所做出的旋转。被动旋转是对坐标轴本身进行的逆时针旋转,它相当于主动旋转的逆操作。在三维空间中,旋转矩阵有一个等于单位1的实特征值。只用三个实数就可以指定一个 3 维旋转矩阵。生成旋转矩阵的一种简单方式是把它作为三个基本旋转的序列复合。关于右手笛卡尔坐标系的 x-, y- 和 z-轴的旋转分别叫做 roll, pitch 和 yaw 旋转。因为这些旋转被表达为关于一个轴的旋转,它们的生成元很容易表达。 1.2 欧拉角 图1 欧拉角表示 设定 xyz-轴为参考系的参考轴,称 xy-平面与 XY-平面的相交为交点线,用英文字母(N)代表。zxz 顺规的欧拉角可以静态地这样定义:(1)a 是 x-轴与交点线的夹角;(2)B是 z-轴与Z-轴的夹角;(3)r 是交点线与X-轴的夹角。 欧拉角来描述刚体在三维欧几里得空间的取向,如图1所示。对于任何一个参考系,一个刚体的取向,是依照顺序,从这参考系,做三个欧拉角的旋转而设定的。所以,刚体的取向可以用三个基本旋转矩阵来决定。换句话说,任何关于刚体旋转的旋转矩阵是由三个基本旋转矩阵复合而成的。对于在三维空间里的一个参考系,任何坐标系的取向,都可以用三个欧拉角来表现。参考系又称为实验室参考系,是静止不动的。而坐标系则固定于刚体,随着刚体的旋转而旋转。

spacer