OpenGL学习脚印: 坐标和变换的数学基础(math-coordinates and transformations)

写在前面
上一节介绍了向量和矩阵,本节将熟悉坐标、线性变换、仿射变换以及坐标转换等概念和计算方法,这些内容对后续的学习将会有很大帮助。部分内容不是OpenGL编程初学者所必须掌握的,可以在以后需要时再回头来看。

这里是对这些知识点的一个总结,旨在对他们有个整体把握,后面具体应用时会使用这些概念。内容尽量以例子形式说明,仅在必要时会给出数学证明。一个主题往往涉及过多内容,对于文中省略的部分,请参考相应的教材。

通过本节可以了解到

  • 坐标的概念
  • 线性变换的概念和计算方法
  • 仿射变换
  • 坐标转换的概念和计算方法

坐标系及坐标

坐标是在特定坐标系下表示物体位置的方法,一谈到坐标,必定是在某个坐标系下给定的。例如经纬度坐标是相对于地球的球面坐标系统给出的。

坐标系则给出了一个参考框架,在这个框架里面,定义其他位置相对于一个起始点(这个起始点称作原点 O )的位置。同一位置,在不同的坐标系下会有不同的坐标,例如你所在城市以经纬度坐标表示,是相对于地球坐标系来给定的,如果从太阳系或者银河系来给定,又会是另外一个不同的值。
常见的坐标系包括:笛卡尔坐标系,极坐标系,球面坐标系等。
如下图所示的我们熟悉的,2D笛卡尔坐标系(来自wiki):
这里写图片描述

如下图所示的熟悉的3D笛卡尔坐标系(来自wiki):
这里写图片描述

定义坐标系

定义一个坐标系需要指定(参考自Objects in Motion):

  • 坐标系的维度 2D, 3D, 4D等等
  • 定义坐标空间轴的向量 这些向量成为基向量,他们有名字,例如x,y,z;这些向量一般而言都是正交的,但不一定非得互相正交(只要线性无关即可,后面介绍),但是每一个维度必须只有一个轴。
  • 坐标系的原点O 原点是导出其他点的参考点。
  • 一个表明空间中点是否合法的区域 在此区域之外的点就不再合法。这个区域根据空间不同,可以是无穷的。

这里,维度已由基向量维数确定,合法区域一般是无穷的,但是在图形处理中某些坐标空间是有限的,例如规范化设备空间(后面其他文章会介绍)。作为一个了解,基向量不一定非得正交,如下图所示:
非正交的轴

对于一般情况,我们只需要记住:
坐标系=(基向量,原点 O )

左手坐标系和右手坐标系

对于任意2个2D坐标系,我们通过旋转、移动翻转可以将两个坐标系xy轴的指向相同。

但是对于3D坐标系,任意两个坐标系却不能等价。实际上,存在两种完全不同的3D坐标系:左手坐标系和右手坐标系。如果同属于左手坐标系或者右手坐标系,则可以通过旋转来重合,否则不可以。
判断一个坐标系是否属于右手系,可以拿出右手,然后右手的大拇指代表+x轴指向,食指代表+y轴指向,中指代表+z轴指向,你可以转动你的右手来匹配这个坐标系,如果能匹配则是右手坐标系,否则是左手坐标系。判断左手坐标系的方法类似。如下图所示为判断右手坐标系的方法(来自OpenGL coordinate system):
这里写图片描述

关于左右手坐标系理解还可以可参考下图(来自《3D数学基础》):
左手右手坐标系
如上右图右手坐标系,这里拇指、食指、其余手指分别代表x,y,z轴的正方向。高等数学教材上使用的是右手坐标系。

旋转正方向的判断

同样还存在一个左手规则和右手规则,可以用于判断当物体绕轴旋转时正方向的判定问题。

对于左手规则,确定一个旋转轴后,左手握成拳头,拇指指向旋转轴的正方向,则其余手指弯曲方向即为旋转的正方向。从旋转轴正向末端来看,正向旋转是顺时针的。对于右手规则,有同样的方法。可参见下图:
左手右手规则

左手右手规则在不同场合有着不同作用。上一节,我们使用右手规则判断了叉积的结果向量的方向。

注意OpenGL中坐标系 OpenGL中的物体、世界、照相机坐标系都属于右手坐标系,而规范化设备坐标系使用左手坐标系。笼统地说OpenGL使用右手坐标系是不合适的。这些坐标系后面会介绍。关于这个问题可以参考SO.

坐标

坐标是在指定坐标系中,相对于原点 O 给出的一个位置。这个位置可以用有序实数对表示(有些坐标系中可能使用复数),注意数对中的数字顺序对结果有影响。上面提到坐标系=(基向量,原点 O ),3D坐标系用向量表示为:
i=(ax,by,bz)j=(bx,by,bz)k=(cx,cy,cz)()
O=(Ox,Oy,Oz)()
这样在坐标系中一点 P 与原点 O 构成的向量:
r=OP=xi+yj+zk
这时称 (x,y,z) 为点 P 的坐标,这个坐标也可以表示向量 OP .
一般地使用的3D笛卡尔坐标系使用标准基向量和坐标原点:
i=(1,0,0)j=(0,1,0)k=(0,0,1)()
O=(0,0,0)() .

从上面可以看到,在一个坐标系中,求取坐标的过程,是一个向量分解的过程。求取一个位置在另一个不同的坐标系中的坐标,则需要进行坐标转换。后面会介绍。

使用坐标系的优势

使用坐标系统便能以解析几何的形式来研究空间几何。通过建立一个坐标系使得空间中点用有序实数组表示,空间图形用方程表示,这样能方便地研究几何图形的性质。


必要基础概念

了解线性变换、仿射变换以及坐标转换,对于后面学习图形编程中的模型变换方法有很大帮助,因此这里予以介绍。要了解这些概念,需要一些其他概念的支撑,这里逐一介绍。每一个概念以定义结合示例的形式给出,如果暂时没有理解清楚,可以暂时跳过,以后回过头来再看或者参考这个主题的其他资料。本部分最后会给出完整的线性变换示例。

向量组的线性组合

向量组是一组向量的集合,例如 α1,α2,,αm 表示一个由m个 n×1 的矩阵(n维列向量)组成的列向量组。对应的也有行向量组的概念。如果存在一组实数 λ1,λ2,,λm ,使得向量 β 满足下式:
β=λ1α1+λ2α2++λmαm(1)

则称向量 β α1,α2,,αm 的线性组合,或者说 β α1,α2,,αm 线性表示。上述求解点 P 坐标时向量 r 分解为向量组 i,j,k 表示的过程,就是一个找出线性表示系数的过程。

向量组线性无关

对于向量组 α1,α2,,αm ,如果存在不全为零的数 λ1,λ2,,λm ,使下面的等式成立:
λ1α1+λ2α2++λmαm=0(2)
则称向量组 α1,α2,,αm 线性相关(linearly dependent), 否则称为线性无关( linearly independent)。也就是要使向量组 α1,α2,,αm 线性无关,那么所有的系数 λi 都必须为0。

线性相关的一种几何解释 来自math.stackexchange:
假定你有一组向量 { x1,x2,,x5} ,你从某个点出发,沿着 x1 走动一段距离,然后沿着 x2 走动一段距离, 最后沿着 x5 走动一段距离,最终你又回到了出发点(这里表明存在 λ1x1+λ2x2+λ5x5=0 ,即式2成立)。这就说明 { x1,x2,,x5} 是线性相关的。

当然存在其他方法,判断向量组线性相关性,感兴趣的可以参考线性代数教材。

线性空间的基

向量空间(也叫做线性空间)是对我们经常使用的2D和3D空间一般规律的拓展,它的定义主要反映的是满足一系列的运算规律,例如交换律和结合律等。由于这个定义包含较多规则,不在此列出,感兴趣的可以参考vector space

如果在线性空间V中存在n个线性无关的向量 α1,α2,,αn 使得V中任意元素 α 都能由他们线性表示,则称 α1,α2,,αn 为V的一个。基所含向量个数n称为线性空间V的维数,并称V为n维线性空间。

例如2D空间中,二维向量组 i=(1,0),j=(0,1) 是它的一个基;在3D空间中,向量组: i=(1,0,0),j=(0,1,0),k=(0,0,1) 是它的一个基。类似的可以推广到n维向量空间的基。

向量在基下的坐标

α1,α2,,αn 是n维线性空间V的一个基,若任取 αV ,总有且仅有一组有序实数 x1,x2,,xn ,使得:
α=x1α1+x2α2++xnαn=(α1,α2,,αn)x1x2xn(3)
成立,则称这组有序数 x1,x2,,xn 为元素 α 在基 α1,α2,,αn 下的坐标,记作 (x1,x2,,xn)T

这里元素 α 用基向量组的线性组合来表示,坐标就是线性组合的系数。例如向量 a=(3,4)=3e1+4e2 ,其中 e1=(1,0),e2=(0,1) 为标准基,则a的坐标为 (3,4)T


线性变换(Linear Transformations)

变换这个词类似于函数,即将一个定义域里的输入量转化为值域里的另一个值,变换就是一个映射关系,一种规则。线性变换的一些性质对于后续学习3D模型变换时,理解起来将会更容易。

线性变换 T:UV 是一个函数,将定义域U中元素,映射到值域V中,并满足下列两个条件(参考Definition LT):
1)可加性 对任意 u1,u2U ,都满足: T(u1+u2)=T(u1)+T(u2)
2)齐次性 对任意 uU 和任意标量 k ,都满足: T(ku)=kT(u)

可以利用上面的两个条件,即可加性和齐次性条件验证一个变换是否是线性变换。
线性变换示例(来自Example ALT)
T(x1x2x3)=[2x1+x34x2]
首先验证其是否满足可加性:

T(x+y)=T(x1x2x3+y1y2y3)=(x1+y1x2+y2x3+
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值