接上文 计算机图形学 学习笔记(九):曲线曲面(一):参数曲线、参数几何代数形式
给定 n+1个数据点,p0 ( x0 , y0 ) … pn ( xn , yn ),生成一条曲线,使得该曲线与这些点所描述的形状相符。
如果要求曲线通过所有的数据点,则属于插值问题;如果只要曲线逼近这些数据点,则属于逼近问题。
逼近在计算机图形学中主要用来设计美观的或符合某些美学标准的曲线。为了解决这个问题,有必要找到一种用小的部分即曲线段构建曲线的方法,来满足设计标准。
基函数:
1962 年,贝塞尔(Bezier)构造了一种以逼近为基础的参数曲线和曲面的设计方法,并用这种方法完成了一种称为 unisurf 的曲线和曲面设计系统。
贝塞尔的想法是在进行汽车外形设计时,先用折线段勾画出汽车的外形的大致轮廓,然后用光滑的参数曲线去逼近这个折线多边形。
这个折线多边形被称为特征多边形。逼近该特征多边形的曲线被称为 Bezier 曲线。
Bezier 方法将函数逼近和几何表示结合起来,使得设计师在计算机上作图就像使用作图工具一样得心应手。
贝塞尔曲线广泛地应用于很多图形图像软件中,例如 Flash、Illstrator、CoralDRAW和 Photoshop 等等。
贝塞尔把参数n次曲线表示为:
1972 年,剑桥大学的博士生 Forrest 证明了 Bezier 曲线的基函数可以简化成 伯恩斯坦基函数。
假如保持 n 次 Bezier 曲线控制多边形的顶点位置不变,而把次序颠倒过来,则此时曲线仍不变,只不过曲线的走向相反而已。
n 次的 Bernstein 基函数可以由两个 n-1 次的 Bernstein 基函数线性组合而成。
一个n 次的 Bernstein 基函数能表示成两个 n-1 次的 基函数的线性和。
Bezier 曲线的形状仅仅与控制多边形各个顶点的相对位置有关,而与坐标系的选择无关。
若 Bezier 曲线的特征多边形是一个平面图形,则平面内任意直线与 p(t)的交点个数不多于该直线与其特征多边形的交点个数,这一性质叫做变差缩减性质。
此性质反应了 Bezier 曲线 比其特征多边形的波动还小,也就是说Bezier 曲线比特征多边形的折线更光顺。
生成一条 Bezier 曲线 实际上就是要求出曲线上的点。下面介绍两种曲线生成的方法:
绘制 Bezier 曲线主要有以下步骤:
根据 Bezier 曲线定义确定的参数方程绘制 Bezier 曲线,因为计算量太大,不适合在工程中使用。de Casteljau 提出的递推算法则要简单很多。
下面举个例子,推导出de Casteljau 递推算法。
由此得到 Bezier 曲线的递推计算公式:
这便是著名的 de Casteljau 算法。de Casteljau 算法稳定可靠,直观简便,可以编出十分简便的程序,是计算 Bezier 曲线的基本算法和标准算法。
de Casteljau 算法 可以用简单的几何作图来实现。
几何设计中,一条 Bezier 曲线旺旺难以描述复杂的曲线形状。这是由于增加特征多边形的定点数,会引起 Bezier 曲线次数的提高,而高次的多项式又会带来计算上的困难。
因此我们可以采用分段设计,然后将各段曲线相互连接起来,并在接合处保持一定的连续条件。
所谓升阶就是指保持 Bezier 曲线的形状与方向不变,增加定义它的控制顶点数,即可以提高该 Bezier 曲线的次数。
三次Bezier 曲线的升阶实例如下图所示:
降阶是升阶的逆过程。
基于 Bezier 曲线的讨论,可以给出 Bezier 曲面的定义和性质,Bezier 曲线的一些算法也可以很容易地扩展到 Bezier 曲面中。
Bezier 曲线的很多性质可以推广到 Bezier 曲面中。
(1)Bezier 曲面特征网络的四个角点正好是Bezier 曲面的四个角点,即:
(2)Bezier 曲面特征网络嘴歪一圈顶点定义Bezier 曲面的四条边界
(3)几何不变形
(4)对称性
(5)凸包性