隐式表示
通过定义一个布尔函数f(x, y , z),我们能够隐式表示一个图元。如果所指定的点在这个图元上,这个布尔函数就为真;对于其他的点,这个布尔函数为假。例如等式:
x2+y2+z2 = 1
对中心在原点的单位球表面上的所有点为真,隐式表示法用于测试图元是否包含某点时非常有用。
参数形式表示
图元也能以参数形式表示。我们从一个简单的2D例子开始,定义如下两个关于t的函数:
x(t) = cos2πt
y(t) = sin2πt
这里t被称作参数,并和所用的坐标系无关。当t从0变化到1时,点(x(t),y(t))的轨迹就是所要描述的形状。这组等式表示的是一个中心在原点的单位元(如图12.1所示):
尽管可以让t在我们想要的任意范围内变化,但是在大多数情况下,把参数的变换范围限制在0到1之间会比较方便一些。另一种常见的变换范围是从0到L,L是图元的"长度"。
如果函数只使用一个参数,就称这些函数为单变量的,单变量函数的轨迹是一条曲线。有时候函数可能有多于一个的参数,双变量函数接受两个参数,经常设为s和t,双变量函数的轨迹是一个曲面。
直接形式表示
我们将这组表示方法命名为直接法,是因为没有更好的术语来描述它们。它们随图元的类型而变化,而且经常能直接体现图元最本质和明显的信息。例如,用两个端点来表示一个线段,用球心和半径来表示一个球。直接形式是最便于人们直接使用的形式。
自由度
每个几何图元都有一个固有的属性:自由度。自由度是无歧义地描述该实体所需信息量的最小数目。有趣的是,同一几何图元,不同表示方法所用到的自由度是不同的。然而,我们会发现"多余"的自由度数量经常是由于图元参数化中的冗余造成的,这些冗余可以通过一些适当的假设条件来消除,如假设向量为单位长度。
直线和射线
在经典几何中,仍使用的是下列定义:
(1)直线向两个方向无限延伸。
(2)线段是直线的有限部分,有两个端点。
(3)射线是直线的"一半",有一个起点并向一个方向无限延伸。
在计算机科学和计算几何中,存在着这些定义的许多变种。这里仍使用直线和线段的经典定义,但对射线的定义做出修改:
(4)射线就是有向线段。
对我们来说,射线有起点和终点。这样,一条射线定义了一个位置,一个有限长度和一个方向(除非射线长度为0)。任何射线都定义了包含这个射线的一条直线和线段。射线在计算几何和图形学中占有非常重要的位置。如图12.2:
两点表示法
描述射线最直观的方法是给出两个端点:起点Porg和终点Pend,如图12.3所示:
射线的参数形式
2D和3D射线都能用参数形式表示,2D射线的参数形式使用两个函数,如公式12.1所示:
x(t) = x0 + t△x
y(t) = y0 + t△y
公式12.1 2D射线的参数形式
3D射线是对2D的一种直接扩展,只需加上第三个函数z(t)即可,参数t的范围从0到
1。
向量记法能使射线的参数形式更加紧凑,在任意维度中表示射线都可以用这种形式。如公式12.2所示:
p(t) = p0 + td
公式12.2 用向量记法表示的射线参数形式
射线的起点p(0) = p0 这样,p0指定了射线的位置信息,同时增量向量d指定了它的长度和方向。射线的终点p(1)
= p0 + d,如图12.4 所示:
在一些相交性测试中,我们可能使用公式12.2的一种变形:d为单位向量,参数t从0变化到L,L是射线的长度。