本文是《Fundamentals of Computer Graphics》第二章2.5节的部分翻译。
2D隐式曲线
从直观上,一条曲线可以看做是用笔在纸上连续画出来的一系列点的集合。描述曲线一种普遍的方式是隐式方程。二维隐式方程的形式是:
f(x,y) = 0.
函数f (x, y)返回一个实数值。使这个值为0的点 (x, y)在曲线上,不为0的点则不在曲线上。
成为“隐式”方程的原因是,点 (x, y)的值不能立即从该方程中计算出来,而必须对方程进行求解。
我们可以把f想象成一个地势,在海平面的地方,f=0(如图2.22)。海岸线就是隐式曲线。f的值是海拔。另一个值得注意的地方是,该曲线将空间切成三部分: f > 0, f < 0, and f = 0. 注意f(x,y) = c中的c取任意的常量,都是一条曲线,c=0只是为了方便。例如,如果f (x, y) = x2 + y2 − 1,改变c的值相当于中心在原点的不同半径的圆(如图2.23)
2D梯度
如果我们把函数 f(x,y)当做高度为f(x,y)的高度图,梯度向量指向坡度最大的方向。例如,指向上坡方向。梯度向量如下:
在曲线f(x,y) = 0上的某一点的梯度向量垂直于该点的切线方向。这个垂直向量通常称为该曲线的法向量。另外,因为梯度向量指向上坡方向,它表示指向f (x, y) > 0区域的方向。
在高度图中,用几何来表示偏导数和梯度更直观。假设在点(a, b)附近, f (x, y)是一个平面(如图2.24).有特定的上坡和下坡方向。与这个方向垂直的方向是该平面的水平方向。该平面和f(x,y) = 0平面的任何相交线都在这个水平方向上。因此上坡和下坡方向都垂直于该平面与f (x, y) = 0平面的交线。为了说明偏导数与梯度的关系,我们需要几何图直观解释。回忆常见的一维函数y = g(x)的导数:
它衡量g的切线的斜率。(如图2.25)。
偏导数是一维导数的推广。对于2D函数f(x,y),我们不能像2.10式那样限制x,因为对于某个的x的变化,f还有许多变化。然而,如果我们保持y为常数,我们可以模拟导数,称为偏导数(如图2.26):
为何基于x和y的偏导数组成了梯度向量?用几何方式比代数更能说明内在本质。如图2.27,我们看见沿着向量a的方向,f一直不变。注意在高度 (x, y) = f (x, y)周围足够小的区域内,可以认为f是平坦的。从图中我们看到a = (Δx, Δy)。
因为上坡方向正交于a,从点积中我们知道:
我们也知道,f在 (xa, ya)方向的变化为零:
给定任意两个相互垂直的(x,y)和(x′,y′)向量,他们的夹角是90度,因此他们的点积为0.因此,我们有 xx′ + yy′ = 0。给定(x, y),很容易构造与它叉积为0的向量,最明显的两个向量是(y,−x) and (−y,x)。从这个观察中做推广,向量(x, y)垂于与向量k(y, −x),其中k是任意一个非零常数。如下:
合并2.11和2.12, 有
k′是非零常数。默认情况下,“上坡”意味着f的正向改变,因此通常我们让 k′ > 0,为了方便最好设k′ = 1。