一 、Bezier曲线的生成
生成一条 Bezier 曲线实际上就是要求出曲线上的点。下面
介绍两种曲线生成的方法:
1、根据定义直接生成 Bezier 曲线
绘制Bezier曲线主要有以下步骤 :
2、Bezier 曲线的递推 (de Casteljau)算法
根据 Bezier 曲线的定义确定的参数方程绘制 Bezier 曲线,
因其计算量过大,不太适合在工程上使用 。de Casteljau 提出的递推算法则要简单得多 。
Bezier 曲线上的任一个点(t),都是其它相邻线段的同等
比例 ( t ) 点处的连线,再取同等比例 ( t ) 的点再连线,一直
取到最后那条线段的同等比例 ( t )处,该点就是Beizer曲
线上的点( t ) 。
以二次 Bezier 曲线为例,求曲线上t=1/3的点:
当 t 从0变到1时,它表示了由三顶点P0、P1、P2三点定义的一
条二次Bezier曲线 。
二次Bezier曲线P
0
2可以定义为分别由前两个顶点(P0,P1)和
后两个顶点(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
的线性组合:
这便是著名的de Casteljau算法。用这一递推公式,在给定
参数下,求Bezier曲线上一点P(t)非常有效 。de Casteljau算法稳定可靠,直观简便,可以编出十分简捷
的程序,是计算Bezier曲线的基本算法和标准算法 。这一算法可用简单的几何作图来实现 。
3、Bezier曲线的拼接
几何设计中,一条Bezier曲线往往难以描述复杂的曲线形
状。这是由于增加特征多边形的顶点数,会引起Bezier曲线次数的提高,而高次多项式又会带来计算上的困难 。
采用分段设计,然后将各段曲线相互连接起来,
并在接合处保持一定的连续条件 。如下:给定两条Bezier曲线 P(t)和 Q(t),相应控制点为
P
i
(i =0,1,...,n)和 Q
i
(i=0,1,...,m)
(1)要使它们达到
G
0
连续,则:P
n
= Q
0
(2)要使它们达到G
1
连续,只要保证P
n-1
,P
n
=Q,Q
1
三点共
线就行了
Bezier曲线的起点和终点处的切线方向和特征多边形的第
一条边及最后一条边的走向一致 。
4 、Bezier曲线的升阶与降阶
假设有一个二次多项式: a
0
+ a
1
t + a
2
t = 0 ,能否找一个三次多项式近似逼近这个二次多项式,或精
确地转成一个三次多项式 ?
所谓升阶就是保证曲线的形状和定向保持不变,但是要增加
顶点个数 。伯恩斯坦基函数不是简单的t2、t3,2 次 Bezier 基函数是Bi,2
,3次是B
i,3
,如何从B
i,2
转化成B
i,3
的形式?
1、Bezier 曲线的升阶
所谓升阶是指保持Bezier曲线的形状与方向不变,增加定义
它的控制顶点数,即提高该Bezier曲线的次数 。
设给定原始控制顶点p
0
,p
1
..p
n
,定义一条n次Bezier曲线
三次Bezier曲线的升阶实例如下图所示:
新的多边形更加靠近曲线。在80年代初,有人证明如果
一直升阶升下去的话,控制多边形收敛于这条曲线 。
2、Bezier曲线的降阶
降阶是升阶的逆过程 。
如果a3不等于0,想找一个二次多项式精确等于它是不可
能的。如果一定要降下来,那只能近似逼近 。如果把a3t3扔掉,也不是不可以,但误差太大。必须想办
法找到一个二次多项式,尽量逼近这个三次多项式 。
Bezier曲线曲面升降阶的重要性
- 第一 它是CAD系统之间数据传递与交换的需要
- 第二 它是系统中分段(片)线性逼近的需要.通过逐次降阶,把曲面化为直线平面,便于求交和曲面绘制
- 第三 它是外形信息压缩的需要。降阶处理以后可以减少存储的信息量
二 、Bezier曲面
基于Bezier曲线的讨论,可以给出Bezier曲面的定义和性
质,Bezier曲线的一些算法也可以很容易扩展到Bezier曲
面的情况 。
1、Bezier曲面的定义
2、Bezier曲面性质
(1)Bezier曲面特征网格的四个角点正好是Bezier曲面的
四个角点,
即: P(0,0) = P
00
P
(1,0)
=
P
m0
P(0,1) = P
0n
P
(1,1)
=
P
mn
(2) Bezier曲面特征网格最
外一圈顶点定义Bezier曲面
的四条边界;
(3)几何不变性
(4)对称性
(5)凸包性
3、Bezier曲面片的拼接
一条曲线可以表示成2条低一次的曲线的线性组合,曲面可以
表示成低一次的
4 张
曲面的线性组合 。
三 、B样条曲线与曲面
一、B样条产生的背景
Bezier曲线曲面有很多优点,可以用鼠标拖动控制顶点以
改变曲线的形状,非常直观,给设计人员很大的自由度 。Bezier曲线曲面是几何造型的主要方法和工具 。
但是Bezier曲线有几点不足:
- 一旦确定了特征多边形的顶点数 (n+1个),也就决定了曲线的阶次 (n次)
- Bezier曲线或曲面的拼接比较复杂
- Bezier曲线或曲面不能作局部修改,为了纠正偏离,在移动一部分时,另外一部分也会被迫移动偏离所期望的曲线 。
函数值不为0的区间通常叫
做它的 [
支撑区间
] ,
因为每个Bernstein多项式
在整个区间[0,1]上都有
支撑,且曲线是这些函数
的混合,所以每个控制顶
点对0到1之间的t值处的曲
线都有影响 。
为了克服了Bezier方法的
弱点,在
保留Bezier方法全部优点的同时,研究人员提出了 样条(spline)—— 分段连续多项式!
整条曲线用一个完整的表达形式,但内在的量是一段一段
的,比如一堆的3次曲线拼过去,两条之间满足2次连续
这样既克服了波动现象,曲线又是低次的。既有统一的表
达时,又有统一的算法 。
如何进行分段呢?
现在有n+1个点,每两点之间构造一条多项式,n+1个点有 n
个小区间 。每个小区间构造一条三次多项式,变成了 n 段的三次多项式
拼接在一起,段与段之间要两次连续,这就是三次样条 。如有5个点,构造一个多项式,应该是个四次多项式。现在
采用样条方式构造四段曲线,每一段都是三次的,且段与
段之间要C
2
连续。
二 、B样条的递推定义和性质
B 样条曲线的数学表达式为 :
B 样条基函数是一个称为节点矢量的非递减的参数 u 的序列
所决定的k 阶分段多项式,这个序列称为节点向量 。
B 样条基函数实际上就是一个多项式,一个比较复杂的、有
特点的多项式而已。如何得到这个B样条基函数?
de Boor-Cox递推定义 (公认最
容易理解的是B样条基函数定义
)
它的原理是,只要是 k 阶(k-1次)的 B 样条基函数,构造
一种递推的公式,由0次构造1次,1次构造2次,2次构造
3次...依次类推。
该递推公式表明:若确定第 i个k阶B样条B
i
,k(u),需要用到
u
i
,u
i
+
1
,...,u
i
+k
共k+1个节点,称区间[u
i
,u
i
+k
]为B
i
,k
(u)的
支承区间 。曲线方程中,n+1个控制顶点Pi(i=0,1,...,n),要用到n+1
个k阶B样条B
i
,k
(u)。它们支撑区间的并集定义了这一组B样
条基的节点矢量
U = [u0,u1,...,
u
n+k]
一次B样条Bi,2(u)可有两个0次B样条Bi,1(u)和Bi+1,1(u)递推
得到,是它们的凸线性组合,
再有两个一次B样条B
i,2
(u) 和B
i+1,2
(u)递推得到二次B样条
B
i,3
(u)
三 、B样条基函数定义区间及节点向量
1、B样条曲线
定义区间
是什么?
Bezier曲线的定义区间是[0,1]
2、第二个问题是对n+1个顶点,k阶的B样条曲线需要
多少
个节点向量
(u
i
)与之匹配?
1 、K 阶B样条对应节点向量数
2、B样条函数定义区间
上面的曲线被分成两段:u
3
u
4
,u
4
u
5
。如有5个顶点P
0
、P
1
、P
2
、
P
3
、P
4,B样条是一段段过渡过去 。哪些基函数是在u
3
u
4区间里有定义? 正好是
P
0
P
1
P
2
P
3 。
P1P2P3P4在
u4u5
区间里有定义,两端之间有三个顶点是一样
的,这样就保证了两段拼接的效果非常好 。
四、B样条基函数的主要性质
1、局部支承性
2 、权 性
3 、连 续 性
B
i
,
k
(u)在r重节点处的连续阶不低于 k-1-r
4、分段参数多项式
B
i
,
k
(u)在每个长度非零的区间[ui
,ui
+1
)上都是次数不
高于k-1的多项式,它在整个参数轴上是分段多项式
5、B 样条函数的主要性质
1、局部性
k 阶B样条曲线上的一点至多与k个控制顶点有关,与
其它控制顶点无关 。移动曲线的第i个控制顶点P
i
,至多影响到定义在区间
上那部分曲线的形状,对曲线其余部分不发生影响
2、变差缩减性
设平面内 n+1 个控制顶点 构成B样条曲线 P(t) 的
特征多边形。在该平面内的任意一条直线与 P(t) 的
交点个数不多于该直线和特征多边形的交点个数 。
3、几何不变性
B样条曲线的形状和位置与坐标系的选择无关
4、凸 包 性
B样条曲线落在P
i
构成的凸包之中。其凸包区域小于或等
于同一组控制顶点定义的Bezier曲线凸包区域 。凸包就是包含右边这6个顶点的
最小凸多边形。凸多边形是把
多边形的每条边延长,其它边
都在它的同一侧 。
该性质导致顺序k+1个顶点重合时,由这些顶点定义的k
次B样条曲线段退化到这一个重合点;顺序k+1个顶点共
线时,由这些顶点定义的k次B样条曲线形状?
5、B样条曲线类型的划分
1、均匀B样条曲线
uniform B-spline curve
当节点沿参数轴均匀等距分布,即ui+1-ui = 常数 > 0
时,表示均匀B样条函数
2、准均匀B样条曲线(Quasi-uniform B-spline curve)
与均匀B样条曲线的差别在于两端节点具有重复度k,
这样的节点矢量定义了准均匀的B样条基
3、分段Bezier曲线(Piecewise Bezier Curve)
节点矢量中两端节点具有重复度k,所有内节点重复度
为k-1,这样的节点矢量定义了分段的Bernstein基 。
B样条曲线用分段Bezier曲线表示后,各曲线段就具有
了相对的独立性
另外,Bezier曲线一整套简单有效的算法都可以原封不
动地采用
缺点是增加了定义曲线的数据,控制顶点数及节点数
4、非均匀B样条曲线 (non-uniform B-spline curve)
当节点沿参数轴的分布不等距,即ui+1-ui≠常数时,
表示非均匀B样条函数 。
五、B样条曲面