Bezier曲线与曲面

Posted by Haiden on April 16, 2019

一、Bezier曲线的背景和定义

1、Bezier曲线的背景

给定n+1个数据点,$p_{0}(x_{0},y_{0})$ ,… $p_{n}(x_{n},y_{n})$ ,生成一条曲线,使得该曲线与这些点所描述的形状相符

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

当用曲线段拟合曲线f(x)时,可以把曲线表示为许多小线段 $φ_{i}(x)$ 之和,其中 $φ_{i}(x)$ 称为基(混合)函数。

Bezier构造了一种以逼近为基础的参数曲线和曲面的设计方法,先用折线段勾画出特征多边形,然后用光滑的参数曲线去逼近这个折线多边形,逼近该特征多边形的曲线被称为Bezier曲线。

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

其中系数矢量ai(i=0,1,…,n)顺序首尾相接

从a0的末端到an的末端所形成的折线称为控制多边形或贝塞尔多边形。

贝塞尔基函数:

2、 Bezier曲线的定义

bezier曲线

针对Bezier曲线,给定空间n+1个点的位置矢量Pi(i=0,1,2,…,n),则Bezier曲线段的参数方程表示如下:

其中 $P_{i}(x_{i},y_{i},z_{i})$ ,i = 0,1,2…n是控制多边形的n+1个顶点,即构成该曲线的特征多边形; $B_{i,n}(t)​$ 是Bernstein基函数,有如下形式:

二项式定理,又称牛顿二项式定理。该定理给出两个数之和的整数次幂的恒等式

$\sum_{i=0}^{n} B_{i,n}(t)$ 恰好是二项式 $[t+(1-t)]^{n}$ 的展开式。

$P_{i}$ 代表空间的很多点,t在0到1之间,把t代进去可以算出一个数–即平面或空间一个点,随着t值的变化,点也在变化。当t从0变到1时,就得到空间的一个图形,这个图形就是bezier曲线。

(1)一次Bezier曲线(线段)

当n=1时,有两个控制点p0和p1,Bezier多项式是一次多项式:

这恰好是连接起点p0和终点p1的直线段

(2)二次Bezier曲线(抛物线)

当n=2时,有3个控制点p0、p1和p2,Bezier多项式是二次多项式:

(3)三次Bezier曲线

三次Bezier曲线由4个控制点生成,这时n=3,有4个控制点p0、p1、p2和p3,Bezier多项式是三次多项式:

其中下列公式为三次Bezier曲线的基函数。

这四条曲线均是三次曲线,任何三次Bezier曲线都是这四条曲线的线形组合。图中每个基函数在参数t 的整个(0,1)的开区间范围内不为0。

把Bezier三次曲线多项式写成矩阵形式:

二、Bernstein基函数的性质

2.1 正性(非负性)

2.2 权性

基函数有n+1项,n+1个基函数的和加起来正好等于1。

2.3 端点性质

2.4 对称性

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

2.5 递推性

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

2.6 导函数

2.7 最大值

$B_{i,n}(t)$ 在 $t = \frac{i}{n}$ 处达到最大值。

2.8 积分

2.9 降阶公式

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

2.10 升阶公式

三、Bezier曲线的性质

3.1 端点性质

顶点 $p_{0}$ 和 $p_{n}$ 分别位于实际曲线段的起点和终点上

Bezier曲线段的参数方程表示如下:

3.2 一阶导数

Bernstein基函数的一阶导数为:

这说明Bezier曲线的起点和终点处的切线方向和特征多边形的第一条边及最后一条边的走向一致。

3.3 几何不变性

指某些几何特性不随坐标变换而变化的特性。Bezier曲线的形状仅与控制多边形各顶点的相对位置有关,而与 坐标系的的选择无关。

3.4 变差缩减性

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

四、Bezier曲线的生成

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

4.1 根据定义直接生成Bezier曲线

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

(1) 首先给出 $C^{i}_{n}$ 的递归计算式:

(2) 将 $ p(t) =\sum^{n}{i=0} P{i}B_{i,n}(t)$ 表示成分量坐标形式:

根据以上的公式可以直接写出绘制Bezier曲线的程序

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

Bezier曲线上的任一个点(t),都是其它相邻线段的同等比例(t)点处的连线,再取同等比例(t)的点再连线,一直 取到最后那条线段的同等比例(t)处,该点就是Beizer曲线上的点(t)。

以二次Bezier曲线为例,求曲线上t=1/3的点:

t从0变到1,第一、二式就分别表示控制二边形的第一、二条边,它们是两条一次Bezier曲线。将一、二式代入第 三式得:

当t从0变到1时,它表示了由三顶点 $P_{0}$ 、 $P_{1}$ 、$P_{2}$ 三点定义的一条二次Bezier曲线。

二次Bezier曲线 $P_{0}^{2}$ 可以定义为分别由前两个顶点( $P_{0}$,$P_{1}$ )和后两个顶点 ( $P_{1}$,$P_{2}$ ) 决定的一次Bezier曲线的线性组合。

由(n+1)个控制点 $P_{i}$ (i=0,1,…,n)定义的n次Bezier曲线 $P_{0}^{n}$ 可被定义为分别由前、后n个控制点定义的两条(n-1)次 Bezier曲线 $P_{0}^{n-1}$ 与 $P_{1}^{n-1}$ 的线性组合:

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

4.3 de Casteljau算法几何作图

这一算法可用简单的几何作图来实现

(1)依次对原始控制多边形每一边执行相同的定比分割,所得分点就是由第一级递推生成的中间顶点 $P_{i}^{1}​$ ( i = 0,1,L,, n-1)

(2)对这些中间顶点构成的控制多边形再执行同样的定比分割,得第二级中间顶点:$P_{i}^{2}$ (i=0,1,L,n-2)

(3)重复进行下去,直到n级递推得到一个中间顶点,即为所求曲线上的点

五、Bezier曲线的拼接

几何设计中,一条Bezier曲线往往难以描述复杂的曲线形状。这是由于增加特征多边形的顶点数,会引起Bezier曲线次数的提高,而高次多项式又会带来计算上的困难。采用分段设计,然后将各段曲线相互连接起来,并在接合处保持一定的连续条件。

给定两条Bezier曲线 P(t)和 Q(t),相应控制点为Pi(i =0,1,…,n)和 Qi(i=0,1,…,m)

(1)要使它们达到G0连续,则:$P_{n}$ = $Q_{0}$

(2)要使它们达到G1连续,只要保证 $P_{n-1}$ ,$P_{n}$ = Q,$Q_{1}$ 三点共线就行

六、Bezier曲线的升阶与降阶

6.1 Bezier曲线的升阶

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

设给定原始控制顶点p0,p1…,pn,定义一条n次Bezier曲线

增加一个顶点后,仍定义同一条曲线的新控制顶点为 $P_{0}^{\ast }$ , $P_{1}^{\ast }$ , …, $P_{n+1}^{\ast }​$ ,则有:

6.2 Bezier曲线的降阶

降阶是升阶的逆过程

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

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

七、Bezier曲面

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

7.1 Bezier曲面的定义

设 $P_{i,j}$ (0,1,…,n;j=0,1,…, m) 为 (n+1) × (m+1)个空间点,则m × n Bezier曲面定义为:

依次用线段连接点列中相邻两点所形成的空间网格,称之为特征网格。

Bezier曲面的矩阵表示式是:

角点位置:四个角点分别是其控制网格的四个点

P(0,0) = $P_{0,0}​$ ; P(0,1) = $P_{0,n}​$ ; P(1,0) = $P_{m,0}​$ ; P(1,1) = $P_{m,n}​$

边界线:Bezier曲面的四条边界线是Bezier曲线

7.2 Bezier曲面性质

(1)Bezier曲面特征网格的四个角点正好是Bezier曲面的四个角点。

(2)Bezier曲面特征网格最外一圈顶点定义Bezier曲面的四条边界。

(3)几何不变性

(4)对称性

(5)凸包性

7.3 Bezier曲面片的拼接

7.4 递推(de Casteljau)算法

Bezier曲线的递推(de Casteljau)算法,可以推广到Bezier曲面的情形。一条曲线可以表示成两条低一次曲线的组合,一张曲面可以表示成低一次的四张曲面的线性组合。