交互式计算机图形学--基于WebGL 第四章 几何对象和变换(1)
记录一下图形学学习过程中需要的一些概念,老忘。
1. 几何对象和其变换
这一章主要介绍如何表示基本的几何类型?几何对象有哪些性质?如何操作?以及我们希望以一种不希望依赖于坐标系的方式来描述几何对象,那么我们应该如何来描述呢?
1.1 基本的几何对象
在计算机图形学当中,我们与各种线段,多边形,多面体这类几何对象打交道。概括性的来说,我们可以用三种基本类型(注意不是基本几何类型)来描述这些几何对象以及这些几何对象之间的关系。
一下介绍这三类基本类型时,我们的出发点是从几何学的观点来考虑这三种类型(解析几何狂喜(o?v?)ノ),当然我们也可以从定理出发形式化的定义他们。虽然我们最终要使用的是每种类型的几何实例,但是我们最终也是需要仔细的区分它们的抽象定义以及特殊的例子或者具体实现,这样可以减少很多错误。
1.1.1 点 标量 向量
最基本的几何对象是点。在几何学中的定义当中:点(Point)是空间中的一个位置,点具有的唯一性质就是它的空间位置。从数学的角度出发,点既没有大小,也没有形状。
仅仅使用点来定义几何对象是远远不够的,需要实数来确定数量。(如两点间的距离:可以理解为两个点之间的顶点的数目)。但是实数仅仅是标量(Scalar)的一个子集。从更普遍的角度来说,我们需要引入标量来确定几何图形当中的一切的数量(大小)的表示。(抒发下自己的感想,理解前面的就好了)标量是服从一组规则的对象。这些规则是从普通的算数运算中抽象出来的。从代数系统的角度来说,我们可以为这些这些标量定义各种代数运算,譬如加减以及它们的逆元乘除,并且加减乘除这些代数运算满足一定的性质如交换律结合律等等。我认为从代数系统的角度形容标量更具有普适性,虽然在几何当中标量的代数运算就是常见的加减乘除。
仅仅有数量还不够,很自然而然的我们就想到方向的定义。因此我们还要引入向量用于描述方向。
向量(vector):在数学当中的定义为,既有大小也有方向的量,又称为矢量。在计算机图形学当中,可将向量理解为一条有向线段,因为我们常常要将两个点用一条有向线段连接起来。向量没有固定的位置,如果两个向量的大小和方向相同,那么我们就称两个向量相同。并且,我们常常将向量和有向线段看成等价的。
结合几何概念,我们定义了向量的数乘、加法、减法,它们遵循相应的数学法则,并且为了方便,我们也定义了一些特殊的向量:单位向量,零向量。单位向量在实际的使用中,我们经常要用它来表示方向,并且由于它的(长度)模是1,也十分便于我们使用。零向量:长度(模)是0,因此它的方向是没有意义的。同时,也有了逆向量的概念,逆向量是指一对长度相同,方向相反的向量,它们是互逆的。
我们不仅仅满足于向量之间的运算,我们还定义了点和向量之间的运算。
向量的数乘:一个数乘上一个向量可以得到一个新的向量,这个新的向量方向不变,长度由这个标量->数来决定。
点-向量加法(point-vector addition):把这个点作为向量的起点,那么向量的终点便是另一个点的位置。我们将得到的这个终点看为点-向量加法的运算结果。
点-点减法(point-point subtraction):俩个点相减的结果可以得到一个向量。如:点B减点A可以得到从A指向B的一个向量AB。可由点-向量加法推出。并且可以结合数乘赋予几何意义。
1.1.2 与坐标系无关的几何
不管使用什么参考系或者坐标系,点还是那个点,它还在那个空间中,改变的仅仅是它的坐标罢了。点的位置坐标是相对于坐标系的,但是不管在什么坐标系中,几何关系是绝对的(这句话可以理解为,假如说两个边是垂直的,我们可以用一个数学法则来定义这种现象,这个定义垂直的法则在任何坐标系当中都是适用的,也就是说它不取决于坐标系,相当于与坐标系无关)。前提是这两个坐标之间点的变换是一对一的(这个坐标系的点唯一对应另一个坐标系的一个点)(满足反函数组定理)。
因此我们似乎可以能够不使用坐标来定义点或者向量。即使这样确实不符合常规的想法,但是还是让我们给出新的定义,从抽象的角度给出。
1.1.3 数学的观点:向量空间和仿射空间
又到了代数的主场了欸,受不了。
我们换一种思路。我们将标量,点和向量看成数学集合中的某一些元素。那么从这些集合当中我们就可以抽象出一个空间--抽象空间。我们定义这个抽象空间的主要目的就是来表示和处理这三类对象的。伟大的数学家们早就研究出了各种问题的抽象空间,但是!我们只关心三个空间:向量空间(躲不过)、仿射空间、Euclid空间(Euclid space)(plus的向量空间)。
最简单的:标量场(scalar field):标量的集合。这个集合的代数运算满足封闭性(封闭性,又称闭包。数学里,给定一个非空集合S 和一个函数F : S X S -> S ,则称 F 为在 S 上之二元运算(binary operation),或称 (S,F) 具有封闭性(closure)。在数学中,若对某个集合的成员进行一种运算,生成的仍然是这个集合的元素,则该集合被称为在这个运算下闭合。---百度百科)。至于为什么叫field 而不是space 不知道,可能标量不配吧诶。
线性空间(向量空间)[linear(vector) space]:这个空间只有两个元素,向量和标量,除了标量之间常见的运算外,还定义了向量--向量加法,标量--向量乘法。两种运算都得到的是向量。具体的例子就比如之前介绍的有向线段。注意:之前介绍的向量和线性空间的向量是不一样的,前者指的就是向量,有大小和方向的那个。抽象空间中的向量代指的不是几何上的向量。它是一种广泛的概念,通俗的理解就是空间中的元素。(回顾代数知识欸)
Euclid空间 :它是对线性空间的拓展,增加了对大小或长度的度量,因此引入了线段长度等概念。
仿射空间(affine space) :也是对线性空间的拓展。但是它拓展的是线性中间中的元素。仿射空间中包含三种元素:标量,向量,点。它对点之间和点和标量之间没有定义运算,但是定义了点--点减法和点--向量加法。之前所介绍的有向线段便是仿射空间的例子。
最重要的是不要将 1.1.1 和1.1.3的运算看作等同的,一个是具体的例子,一个抽象上的概括。
在这些抽象空间中,我们定义的这些对象(点、标量、矢量)不依赖于任何的向量表示,对象只是各种集合中的元素。
向量空间的主要的概念是:通过一组基向量要来表示向量。这种表示把抽象的对象和它们具体的几何实现联系在了一起。不同的表示方法之间的转换便引出了几何变换。(以后记录)
总之:这一大部分主要介绍了我们通过三种基本的对象来表示几何对象,并且我们介绍了这些对象的一些性质,运算。然后我们希望以一种不依赖于坐标系的方式来表示这些基本对象,便引出了抽象空间的定义,并大体介绍了三种最基本的空间。并为接下来要记录的内容埋下了伏笔。
这些图形的最基本的表示对象是不同于API的,需要将它们区别开来。但是它们之间又有着联系,毕竟API还是由核心的思想中走出来的。
查阅书籍:
交互式计算机图形学--基于 WebGL的自顶向下的方法。