计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

接上文 计算机图形学 学习笔记(九):曲线曲面(一):参数曲线、参数几何代数形式


7.5 Bezier 曲线背景及定义

Bezier 曲线背景

给定 n+1个数据点,p0 ( x0 , y0 ) … pn ( xn , yn ),生成一条曲线,使得该曲线与这些点所描述的形状相符。

如果要求曲线通过所有的数据点,则属于插值问题;如果只要曲线逼近这些数据点,则属于逼近问题。

逼近在计算机图形学中主要用来设计美观的或符合某些美学标准的曲线。为了解决这个问题,有必要找到一种用小的部分即曲线段构建曲线的方法,来满足设计标准。

基函数:

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

1962 年,贝塞尔(Bezier)构造了一种以逼近为基础的参数曲线和曲面的设计方法,并用这种方法完成了一种称为 unisurf 的曲线和曲面设计系统。

贝塞尔的想法是在进行汽车外形设计时,先用折线段勾画出汽车的外形的大致轮廓,然后用光滑的参数曲线去逼近这个折线多边形。

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

这个折线多边形被称为特征多边形。逼近该特征多边形的曲线被称为 Bezier 曲线。

Bezier 方法将函数逼近和几何表示结合起来,使得设计师在计算机上作图就像使用作图工具一样得心应手。

贝塞尔曲线广泛地应用于很多图形图像软件中,例如 Flash、Illstrator、CoralDRAW和 Photoshop 等等。

贝塞尔把参数n次曲线表示为:

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

1972 年,剑桥大学的博士生 Forrest 证明了 Bezier 曲线的基函数可以简化成 伯恩斯坦基函数。

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

Bezier 曲线的定义

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

一次 Bezier 曲线

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

二次 Bezier 曲线

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

三次 Bezier 曲线

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

7.6 Bezier 曲线性质

Bernstein 基函数的性质

正性(非负性)

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

权性

基函数有 n+1 项,n+1 个基函数的和加起来正好等于1
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

端点性质

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

对称性

假如保持 n 次 Bezier 曲线控制多边形的顶点位置不变,而把次序颠倒过来,则此时曲线仍不变,只不过曲线的走向相反而已。

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

递推性

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

n 次的 Bernstein 基函数可以由两个 n-1 次的 Bernstein 基函数线性组合而成。

导函数

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

最大值

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

积分

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

降阶公式

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

一个n 次的 Bernstein 基函数能表示成两个 n-1 次的 基函数的线性和。

升阶公式

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

Bezier 曲线性质

端点性质

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

一阶导数

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

几何不变性

Bezier 曲线的形状仅仅与控制多边形各个顶点的相对位置有关,而与坐标系的选择无关。

变差缩减性

若 Bezier 曲线的特征多边形是一个平面图形,则平面内任意直线与 p(t)的交点个数不多于该直线与其特征多边形的交点个数,这一性质叫做变差缩减性质。

此性质反应了 Bezier 曲线 比其特征多边形的波动还小,也就是说Bezier 曲线比特征多边形的折线更光顺。

8.1 Bezier 曲线生成算法

生成一条 Bezier 曲线 实际上就是要求出曲线上的点。下面介绍两种曲线生成的方法:

根据定义直接生成 Bezier 曲线

绘制 Bezier 曲线主要有以下步骤:

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

Bezier 曲线的递推(de Casteljau)算法

根据 Bezier 曲线定义确定的参数方程绘制 Bezier 曲线,因为计算量太大,不适合在工程中使用。de Casteljau 提出的递推算法则要简单很多。

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

下面举个例子,推导出de Casteljau 递推算法。

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

由此得到 Bezier 曲线的递推计算公式:

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

这便是著名的 de Casteljau 算法。de Casteljau 算法稳定可靠,直观简便,可以编出十分简便的程序,是计算 Bezier 曲线的基本算法和标准算法。

de Casteljau 算法几何作图

de Casteljau 算法 可以用简单的几何作图来实现。

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

Bezier 曲线计算举例

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

8.2 Bezier 曲线的拼接及升降阶

Bezier 曲线的拼接

几何设计中,一条 Bezier 曲线旺旺难以描述复杂的曲线形状。这是由于增加特征多边形的定点数,会引起 Bezier 曲线次数的提高,而高次的多项式又会带来计算上的困难。

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

因此我们可以采用分段设计,然后将各段曲线相互连接起来,并在接合处保持一定的连续条件。

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

Bezier 曲线的升阶与降阶

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

Bezier 曲线的升阶

所谓升阶就是指保持 Bezier 曲线的形状与方向不变,增加定义它的控制顶点数,即可以提高该 Bezier 曲线的次数。

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

三次Bezier 曲线的升阶实例如下图所示:

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

Bezier 曲线的降阶

降阶是升阶的逆过程。

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

Bezier 曲线曲面升降阶的重要性

  1. 它是CAD系统之间数据传递与交换的需要
  2. 它是系统中分段(片)线性逼近的需要。通过逐次降阶,把曲面化为直线平面,便于求交和曲面绘制
  3. 它是外形信息压缩的需要。降阶处理以后可以减少存储的信息量

8.3 Bezier 曲面

基于 Bezier 曲线的讨论,可以给出 Bezier 曲面的定义和性质,Bezier 曲线的一些算法也可以很容易地扩展到 Bezier 曲面中。

Bezier 曲面的定义

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

Bezier 曲面性质

Bezier 曲线的很多性质可以推广到 Bezier 曲面中。

(1)Bezier 曲面特征网络的四个角点正好是Bezier 曲面的四个角点,即:

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

(2)Bezier 曲面特征网络嘴歪一圈顶点定义Bezier 曲面的四条边界
(3)几何不变形
(4)对称性
(5)凸包性

Bezier 曲面片的拼接

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面

递推(de Casteljau)算法(曲面的求值)

计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面