76范文网为您提供各类范文参考!
当前位置:76范文网 > 知识宝典 > 范文大全 > Bezier和B-样条曲线的算法研究

Bezier和B-样条曲线的算法研究

来源:76范文网 | 时间:2019-05-09 10:30:48 | 移动端:Bezier和B-样条曲线的算法研究

Bezier和B-样条曲线的算法研究 本文简介:

毕业论文题目:Bezier和B-样条曲线的算法研究系别:数学与计算机科学系班级:学号:姓名:指导教师:职称:起讫日期:Bezier和B-样条曲线的算法研究摘要:样条曲线发展迅速。在基于PC系统的3DMax、AutoCAD、Maya等建模工具中,“样条曲线”以“基本图形对象”的存在形式,实现平面绘图、

Bezier和B-样条曲线的算法研究 本文内容:

毕业论文

目:
Bezier和B-样条曲线的算法研究


别:
数学与计算机科学系班
级:学
号:姓
名:

指导教师:


称:
起讫日期:Bezier和B-样条曲线的算法研究摘要:样条曲线发展迅速。在基于PC系统的3D
Max、AutoCAD、Maya等建模工具中,“样条曲线”以“基本图形对象”的存在形式,实现平面绘图、立体绘图基本功能,是“三维动画”的重要组成元素
;样条曲线也是几何造型技术的重要内容。“Bezier和B样条曲线”在样条曲线的发展史中举足轻重,诸多其他曲线都是由它们发展而来的。本文对Bezier和B样条曲线的算法进行全面、系统和深入的研究,重点研究它们的性质和相互的内在关系。关键词:Bezier曲线;B样条曲线;The
Investigation
of
Curve
algorithm
on
Bezier
and
B-spline
Abstract:Spline
curve
is
developing
rapidly.
Among
PC-based
system,
3D
Max,
AutoCAD,
Maya
and
other
modeling
tools,
spline
curve
have
basic
function
of
dimensional
drawings
and
three-dimensional
drawing
for
its
“basic
graphic
object"
form,
spline
curve
is
a
vital
component
of
"three-dimensional
animation,"
it
is
also
an
important
content
of
geometric
modeling
techniques.
"Bezier
and
B-spline
curve"
is
important
in
the
development
of
spline
curve,
many
other
curves
are
evolved
based
on
them.
This
paper
has
a
comprehensive,
systematic
and
deep
research
on
Bezier
and
B-spline
curve
algorithm
and
focuses
on
their
nature
and
the
intrinsic
relationship
between
them.Key
words:Bezier
curves;
B-spline
curve;




第1章
绪论
1
1.1
研究背景
1
1.1.1
样条曲线的发展历程与研究前沿
1
1.1.2
样条曲线的应用
1
1.2
主要工作
2
第2章
曲线基础
3
2.1
曲线的参数表示
3
2.2
插值与逼近
4
2.2.1
插值
4
2.2.1
逼近
4
2.3
连续性
5
2.3.1
函数的可微性
5
2.3.2
几何连续性
5
2.4
样条描述
6
2.5
三次样条
7
第3章
Bezier和B-样条曲线
9
3.1
Bezier曲线的算法研究
9
3.1.1
Bezier曲线的定义
9
3.1.2
Bezier曲线的性质
12
3.1.3
Bezier曲线的拼接
13
3.1.4
用de
Casteljau算法离散生成Bezier曲线
14
3.1.5
Bezier曲线的几个不足
16
3.2
B-样条曲线的算法研究
16
3.2.1
B-样条曲线的定义
16
3.2.2
B-样条曲线的分类
17
3.2.3
B-样条曲线的性质
21
3.2.4
有理样条和NURBS曲线
22
3.3
Bezier曲线和B-样条曲线的比较与相互转换
24
3.3.1
Bezier曲线和B-样条曲线的比较
24
3.3.2
Bezier曲线和B-样条曲线的相互转换
24
3.4
自由曲线是自由曲面的基础
25
第4章
结论
26


27
参考文献
28


29第1章
绪论
1.1
研究背景
1.1.1
样条曲线的发展历程与研究前沿
1964年,美国麻省理工学院(MIT)的孔斯(Coons)用封闭曲线的4条边界定义一张曲面。同年,舍恩伯格(Schoenberg)提出了参数样条曲线、曲面的形式。1971年,法国雷诺(Renault)汽车公司的贝济埃(Bezier)发表了一种用控制多边形定义曲线和曲面的方法。1972年,德布尔(de
Boor)给出了B样条的标准计算方法。1974年,美国通用汽车公司的戈登(Gorden)和里森费尔德(Riesenfeld)将B样条理论用于形状描述,提出了B样条曲线和曲面。1975年,美国锡拉丘兹(Syracuse)大学的佛斯普里尔(Versprill)提出了有理B样条曲线。20世纪80年代后期,皮格尔(Piegl)和蒂勒(Tiller)将有理B样条曲线发展成非均匀有理B样条(Nonuniform
Rational
B-Spline,NURBS)曲线。NURBS曲线已成为当前自由曲线和曲面描述的最广为流行的技术,目前国际标准化协会(ISO)已将NURBS曲线方法作为定义工业产品几何形状的唯一数学方法。[04]
样条曲线的研究领域涉及诸多内容,主要有各阶次样条曲线的不同扩展(比如NUAHBs、C-Bezier曲线、C-B样条曲线、H-Bezier曲线等)、结点插入算法的研究及应用、光顺的新方法研究、求值、升阶降阶方法的研究、造型与形状调整的研究以及实时插补技术的研究等几个方向。
1.1.2
样条曲线的应用
曲线曲面造型是计算机辅助几何设计和计算机图形学的一项重要内容,也是CAD/CAM系统的最关键的部分之一,其应用除了航空、造船、汽车这三大制造业外,还涉及医疗诊断、生物工程等设计领域。
当前,CAD/CAM中曲线曲面造型的主流方法为Bezier曲线曲面和NURBS方法。针对工程曲线曲面造型中这两种方法存在的缺陷,[07]我们可以对已有的样条函数进行调整或修改,通过改变调和函数的形式,对样条曲线进行传递扩展,从而达到调整和改变曲线形状的目的。生成的新样条曲线不仅具备基础样条函数的性质,还具有自身的优点。例如,对二次均匀B样条基函数进行扩展,构造出三次和四次带局部参数
的调和函数,推广后得到了n次的调和函数,它们具有二次均匀B样条基函数的性质,且用它们生成的分段多项式曲线具有与分段二次均匀B样条曲线相同的结构和几何性质;又如,用一种混合基(代数多项式和三角函数的线性组合)代替三次多项式曲线方程中的幂基,并相应地修改基函数而形成的用曲线曲面方程所表示的曲线曲面,这就是一种新颖的曲线曲面造型方法——C曲线曲面理论。[07]大多数物体的曲线曲面部分,都可以使用灵活的B样条曲线进行拟合。在基于PC系统的3D
Max、AutoCAD、Maya等建模工具中,“样条曲线”以“基本图形对象”的存在形式,实现平面绘图、立体绘图基本功能,是“三维动画”的重要组成元素。
1.2
主要工作
本文主要的工作是系统的研究和整理Bezier和B样条曲线的算法、性质、作用以及样条曲线的其他相关基础知识,并基于VC++6.0对这两种样条曲线进行实现和性质比较。
论文思路大致如下:
首先讨论Bezier曲线。Bezier曲线在本质上是由调和函数根据控制点插值生成的,其运算量较大。de
Casteljau算法的效率则要高得多。Bernstein调和函数在[0,1]上都是“活动”的,使得Bezier曲线不能作局部修改;且调和函数的次数与控制点的个数相关,使得高阶次Bezier曲线计算较为复杂,并且由于对数字取整也给结果带来误差;采用在点集中插入一些点“拼接”虽然可以满足多段Bezier曲线的光滑连接条件,但不方便。
然后是寻找到能灵活控制曲线形状且计算量不大等更好性质的调和函数。为了获得足够的灵活性,可以试着把几个低次多项式分段“连接”起来。这样在不同的t分段区间上用不同多项式定义的曲线称为分段多项式。对曲线形状更自如地控制,并能够指定对哪些控制点插值,把讨论过的所有设计方法都封装进去,组成单个算法。用n次B样条基函数替换Bernstein基函数,便获得B(basis)样条曲线。
接着是对B样条曲线进行研究。主要研究均匀B样条曲线的算法,并介绍非均匀B样条曲线和开放B样条曲线。Bezier曲线是B样条曲线的特例,B样条多项式的阶数增加1,每个B样条调和函数就支持扩展一个区间,同时降低了一些局部控制能力。当m到达边界n+1时,就得到了Bezier曲线,这时的局部控制能力为最小。Bezier曲线和B样条曲线之间可以进行相互转换。
最后点明样条曲线是自由曲面的基础。
另外,结合在VC++6.0上实现的Bezier和B样条曲线,对其性质进行直观的分析和比较。
第2章
曲线基础
2.1
曲线的参数表示
曲线的表示可以分为参数表示和非参数表示两种,其中非参数表示又可分为显式表示和隐式表示两种。对于一个平面曲线,显式表示一般形式是y=f(x)。在此方程中,一个x值与一个y值对应,所以显式方程不能表示封闭或多值曲线,例如,不能用显式方程表示一个圆。
如果一个平面曲线方程,表示成f(x,y)=0的形式,则称之为隐式表示。隐式表示的优点是易于判断函数f(x,y)是否大于、小于或等于零,也就易于判断点是落在所表示曲线上或曲线的哪一侧。
非参数方程的缺点是:与坐标轴相关;会出现斜率为无穷大的情形(如垂线);对于非平面曲线,难以用常数系数的非参数化函数表示;不便于计算机编程。
由于参数表示的曲线具有几何不变性等优点,计算机图形学中通常用参数形式描述曲线。在几何造型系统中,曲线方程通常表示成参数的形式,即曲线上任一点的坐标均表示成给定参数的函数。假定用t表示参数,平面曲线上任一点P可表示为(2.1)
空间曲线上任一三维点P可表示为
(2.2)
最简单的参数曲线是直线段,端点为、的直线段参数方程可表示为

(2.3)

圆在计算机图形学中应用十分广泛,其在第一象限内的单位圆弧的非参数显式表示为其参数形式可表示为(2.4)

在曲线的表示上,参数方程比显式、隐式方程有更多的优越性,主要表现在一下几点。
l
可以满足几何不变性的要求。
l
有更大的自由度来控制曲线的形状。
l
对非参数方程表示的曲线进行变换,必须对曲线上的每个型值点进行几何变换;而对参数表示的曲线可对其参数方程直接进行几何变换。
l
便于处理斜率为无穷大的情形,不会因此而中断计算。
l
参数方程中,代数、几何相关和无关的变量是完全分离的,而且对变量个数不限,从而便于用户把低维空间中曲线扩展到高维空间去。这种变量分离的特点使人们可以用数学公式处理几何分量。
l
规格化的参数变量,使其相应的几何分量是有界的,而不必用另外的参数去定义边界。
l
易于用向量和矩阵表示几何分量,简化了计算。
2.2
插值与逼近
2.2.1
插值

给定一组有序的数据点(i=0,1,2,…,n),构造一条曲线顺序通过这些数据点,称为对这些数据点进行插值,所构造的曲线称为插值曲线。
(1)线性插值
假设给定函数f(x)在两个不同点和的值,用一个线形函数,近似代替f(x),称为f(x)的线性插值函数。其中线性函数的系数是a,b,通过条件:可表示为:
(2.5)
(2)抛物线插值

抛物线插值又称为二次插值。设已知f(x)在3个互异点,,的函数值为,,,要求构造一个函数:,使在结点处与在处的值相等。由此可构造的线性方程组,求得a,b,c,即构造了的插值函数。[02]
图2-1
曲线的插值2.2.1
逼近
当型值点较多时,构造插值函数通过所有型值点是相当困难的。而测量所得的数据点本身比较粗糙,使得构造精确的插值函数也是没有意义的。这时通常选择一个次数较低的函数,构造一条曲线使之在某种意义下最接近给定的数据点,称为对这些数据点进行逼近,所构造的曲线为逼近曲线。插值和逼近则统称为拟合。
逼近的方法最常用的是最小二乘法,假设给定一组数据点,要求构造一个逼近函数。令是m次多项式,即逼近的程度可以通过各点偏差的平方和来度量。最小二乘问题就是要求出各系数,使偏差的平方和最小,即求解式(5.6)所示函数的极值问题:

(2.6)
如要取到极值,则(2.7)

这里只有m+1个系数是未知量,可通过求解m+1个方程得出。将系数带入多项式函数即可得到所求的逼近函数。
图2-2
曲线的逼近
[02]2.3
连续性
设计一条复杂曲线时,常常通过多段曲线组合而成,这需要解决曲线段之间如何实现光滑连接的问题。曲线间连接的光滑度的度量有以下两种。
2.3.1
函数的可微性

把组合参数曲线构造成在连接处具有直到n阶连续,即n阶连续可微,这类光滑度称之为或n阶参数连续性。
2.3.2
几何连续性

组合曲线在连接处满足不同于的某一组约束条件,称为具有n阶几何连续性,简记为。

曲线光滑度的这两种度量方法并不矛盾,连续包含在连续之中。

对于曲线P(t)和Q(t),参数。若要求在接合处达到连续或连续,即两曲线在结合处位置连续,有
(2.8)

若要求在结合处达到连续,就是说两条曲线在结合处在满足连续的条件下,并有公共的切线向量:(2.9)

当时,连续就称为连续。若要求在结合处达到连续,就是说两条曲线在结合处在满足连续的条件下,并有公共的曲率:
(2.10)

将式(2.9)及式(2.10)合并整理,得
(2.11)

这个关系为
(2.12)

为任意函数。当时,连续就称为连续。
2.4
样条描述
样条(Spline)一词来源于工程绘图人员为了将一些指定点连接成一条光顺曲线所使用的工具,即富有弹性的细木条或薄钢条。
最初,样条曲线都是借助于物理样条得到的,放样员把富有弹性的细木条(或有机玻璃条),用压铁固定在曲线应该通过的给定型值点处,样条做自然弯曲所绘制出来的曲线就是样条曲线。样条曲线不仅通过各有序型值点,并且在各型值点处的一阶和二阶导数连续,也即该曲线具有连续的、曲率变化均匀的特点。
在计算机图形学中,样条曲线是指由多项式曲线段连接而成的曲线,在每段边界处满足特定的连续性条件。
通常用式(2.9)来描述n次样条参数多项式曲线:(2.13)

将式(2.9)写成矩阵乘积的形式,得(2.14)
其中C为(n+1)×3阶的系数矩阵,T为n+1个幂形式的基函数组成的向量。[02]
2.5
三次样条
多项式是一种基本的数学研究对象,在计算机图形学中经常使用多项式,这时因为多项式定义简介,并且计算起来效率很高。
虽然Sederberg已经证明了对给定的多项式函数x(t)和y(t),总能找到其隐式形式,但是一般来说,只有对一次或二次的隐式形式才总能找到其参数方程形式。用一次和二次多项式参数化的曲线很容易理解。当使用更高次的多项式时,情况就要复杂得多。
三次多项式为曲线设计提供了一条功能强大的途径。但是这些方法不是从隐式形式出发寻找其参数化形式,而是从设计者选定的一组“控制点”出发,应用某个特定的算法生成曲线上的点,如果满意就接受这条曲线而不去管它的隐式形式。与单纯采用数学手段相比,这种方法在许多方面都是一种更自然的曲线设计方法。[01]

三次多项式在灵活性和计算速度之间提供了一个合理的这种方案。与更高次的多项式相比,三次样条只需要较少的计算与存储且较稳定;与低次的多项式相比,三次样条又具有更多的灵活性,事实上,大多数形状表示与设计都是采用三次多项式来实现的。

给定n+1个点,可得到通过每个点的分段三次多项式曲线:

(2.15)

方程组中12个系数唯一地确定了一条3次参数曲线的位置与形状。将式(2.11)写成向量式,得(2.16)
其中a,b,c,d是代数系数向量,p(t)是三次参数曲线上任一点的位置向量。

描述参数曲线的条件有端点位置向量、端点切线向量及曲率等。对三次参数曲线,可用其端点向量和端点切线向量描述,将简记为,则由式(2.13)可得(2.17)

将这些系数代回到原曲线方程,则曲线方程可表示为
(2.18)

这时三次参数曲线为三次Hermite样条曲线,即

(2.19)
(2.20)

其中,是Hermite矩阵,它是边界约束矩阵的逆阵,通常为为常数。是Hermite几何向量。式(2.17)为三次Hermite样条曲线的方程:
(2.21)

在上式中只要给定,就可以求出p(t)。对于不同的初始条件是不同的,但T和都是相同的,将T?称为Hermite基函数(也可以称为混合函数或调和函数)。其表达式为(2.22)
则Hermite基函数的各分量可写为

(2.23)
利用基函数表达的三次Hermite样条曲线的方程为(2.24)
其中和专门控制端点的函数值对曲线的影响,而同端点的导数值无关;和则专门控制端点的一阶导数值对曲线形状的影响,而同端点的函数值无关。或者说,和控制左端点的影响,和控制右端点的影响。

三次Hermite样条曲线特点是可以局部调整,因为每个曲线段仅依赖于端点约束。基于Hermite样条的变化形式为Cardinal样条和Kochanek-Bartels样条。Hermite曲线具有几何不变性。[02]
第3章
Bezier和B-样条曲线
Bezier和B-样条曲线的算法研究,即由基本运算及规定的运算顺序所构成的完整的解题步骤。
3.1
Bezier曲线的算法研究

1971年,法国雷诺(Renault)汽车公司的贝济埃(Bezier)发表了一种用控制多边形定义曲线和曲面的方法——Bezier曲线。这中方法能够较直观地表示给定的条件与曲线形状的关系,使用户可以方便地通过修改参数来改变曲线的形状及阶次,而且算法较为简单,易于被用户接受。Bezier曲线是通过一组多边形的顶点来定义的。如果多边形的顶点固定不变,则由其定义的Bezier曲线是唯一的。在多边形的各顶点中,只有第一点和最后一点在曲线上且作为曲线的起点和中点,其他的点用于控制曲线的形状及阶次。曲线的形状趋向于多边形的形状,要修改曲线,只要修改多边形的各顶点就可以了。因此,该多边形又称Bezier曲线的控制多边形,其顶点称为控制点。
常用的三次Bezier曲线如图3-1所示。[03]

[02]
P2
P2
P0
P1
P3
P1
P0
P3
图3-1
三次Bezier曲线3.1.1
Bezier曲线的定义

Bezier曲线在本质上是由调和函数根据控制点插值生成的,其数学表达式为如下的参数方程:
(3.1)
其中构成该Bezier曲线的特征多边形,是n次Bernstein基函数。Bernstein基函数具有如下形式:

(3.2)
这里规定,因此当t=0且i=0时,;当t=0且i≠0时,;当t=1且i=n时,;当t=1且i≠n时,。
(1)一次Bezier曲线(n=1)
一次多项式,有两个控制点,其数学表示及矩阵表示为
(3.3)
显然,这是一条连接P0、P1的直线段,如图3-2所示。[06]图3-2
线性内插法获得线性Bezier曲线的过程

(2)二次Bezier曲线(n=2)
二次多项式,有三个控制点,其数学表示如下:

(3.4)
由上式的结果可知,二次Bezier曲线为抛物线,图形如图3-3。将上式改写为矩阵形式:
[06]
(3.5)图3-3
de
Casteljau算法获得二次Bezier曲线的过程
(3)三次Bezier曲线(n=3)
三次多项式,有四个控制点,其数学表示如下:

(3.6)
其矩阵形式为

(3.7)
上面式中的Bernstein多项式构成了三次Bezier曲线的一组基,或称三次Beizer曲线的调和函数,即:

(3.8)[03]
图3-4
三次Bezier曲线的调和函数
它们是图3-4中所示的4条曲线。[03]
类似可以得出四次及更高次的Bezier曲线函数。
通过以上定义可以看出Bezier曲线的特点:
l
Bezier曲线基函数的次数等于控制点的数目减1;
l
Bezier曲线的基函数在整个定义区间内都不为0。[02][06]图3-5
de
Casteljau算法获得三次Bezier曲线的过程
3.1.2
Bezier曲线的性质

Bezier曲线具有一些重要的性质,这些性质使其特别适合于CAGD。(开放B样条曲线也具有这些性质)
l
端点插值
当t=0时,,故P(t=0)决定曲线的起点;当t=1时,,故P(t=1)决定曲线的终点。因此,Bezier曲线的起点、终点与相应的特征多边形的起点、终点重合。[02]
l
对称性
只要保持特征多边形的顶点位置不变,但顺序颠倒,所得新的Bezier曲线形状不变,只是参数变化的方向相反。[03]
l
仿射不变性(几何不变性)
常常为了缩放一条Bezier曲线,或者改变其方向和位置以备后用,需要对其进行仿射变化。只须对控制点施加变换(变换一次),然后对这些新的控制点用同样的Bernstein式重新生成任意t值处的变换后的Bezier曲线。[01]
l
参数的仿射变换不变性
通常,我们定义的参数区间为。但是有时使用别的区间更方便。比方参数u在a~b的区间上变化。为此只须把每个t替换为:(3.9)
随着u从a变化到b,每个Bernstein多项式的变量从0变化到1,这正如。
l
凸包性(线性精度:曲线上一部分是直线。)
由于当t∈[0,1]时,Bernstein多项式之和为(3.10)且(3.11)
图3-6
凸包性
这说明构成了Beizer曲线的一组权函数,所以Bezier曲线一定落在其控制多边形的凸包之中。
l
波动减小性
粗略地说,Bezier曲线的“波动”程度不能超过其控制多边形的“波动”。更精确地说,任何直线与Bezier曲线的交点个数不超过其与这条曲线的控制多边形的交点个数。[01]
图3-7
波动减小性
3.1.3
Bezier曲线的拼接

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

假设给定两条Bezier曲线和,相应控制点为和,如图3-8所示。
[02]
图3-8
两段三次Bezier曲线的连接
P
0
P
1
P
2
P
3
(Q
0
)
Q
1
Q
2
Q
3(1)要使和达到连续的充分必要条件是:(3.12)
(2)要使和达到连续的充分必要条件是:这3点共线,即
(3.13)
(3)要使和达到连续的充分必要条件如下:
①在连续的条件下,与均不为零且同向,还要求在处曲率相等且主法线的方向一致。如对于三次Bezier曲线,要使它达到连续即要满足式(3.13),即(3.14)
②这5点共面,且和或者同在直线上或者位于直线的同侧,即(3.15)
其中和分别表示和到直线的距离。通常达到二阶几何连续即可满足要求。[02]
3.1.4
用de
Casteljau算法离散生成Bezier曲线

前面讨论的Bezier曲线绘制算法完全是按照调和函数的方式写出的,其运算量较大。下面研究的de
Casteljau算法的效率则要高得多。

de
Casteljau算法是用下面的迭代公式计算型值点:
(3.16)
可以用数学归纳法证明型值点就是。

对于三次Bezier曲线,有(3.17)

[03]图3-9
de
Casteljau算法的计算过程

这个计算过程如图3-9所示。其中横向箭头表示权重为,斜向下的箭头表示权重为t。

根据该算法的原理,以三次Bezier曲线为例,求取参数t处的型值点。步骤如下:
(1)按照特征多边形各顶点的排列顺序,将特征多边形的三条边依次按比值t:1-t分为两段,取得分店。
(2)对边分别再按比值t:(1-t)分为两段,取得分点。
(3)对边按比值t:(1-t)分为两段,取得分点,即为t处的型值点。
[03]图3-10
使用de
Casteljau算法绘制Bezier曲线上的点[03]
3.1.5
Bezier曲线的几个不足
(1)Bernstein多项式的次数与控制点的个数有关。基于n+1个控制点的Bezier曲线是若干个n次多项式的组合,这就导致高次多项式计算起来代价很高,并且由于对数字取整也给结果带来误差。
(2)没有局部控制能力。在Bezier曲线中,对任何一个控制点的改变都会导致整条曲线的改变。这是因为每个Bernstein多项式都在整个[0,1]区间上有支持,而最后得到的曲线是这些函数的混合,所以每一个控制点对0~1之间所有t值处的曲线都有影响。我们要寻找一组控制点具有一定局部控制能力的调和函数。

(3)虽然可以通过在点集中插入一些点来满足多段Bezier曲线的光滑连接条件,但这种方法显然很不方便。

为了克服上述缺点,1972年,de
Boor和Cox分别提出了B样条的计算方法。1974年,美国通用汽车公司的Gorden和Riesenfeld提出了B样条曲线和曲面。B样条曲线除保持了Bezier曲线的直观性和凸包性等优点之外,还可以局部修改,曲线形状更趋近于特征多边形。B样条曲线可以连续光滑拼接,曲线的阶次与顶点数无关。由于这些原因,B样条曲线和曲面得到越来越广泛的应用。
3.2
B-样条曲线的算法研究

B样条曲线是低阶次曲线,易于进行局部修改,更逼近特征多边形。B样条曲线用n次B样条基函数替换了Bernstein基函数。
3.2.1
B-样条曲线的定义

B样条曲线的方程定义为:(3.18)
在式(3.18)中,顶点为控制顶点,又称为德布尔(de
Boor)点。称折线为p(t)的控制多边形,k为B样条曲线的次数。为k次B样条基函数。可通过式(3.19)计算B样条基函数,即
(3.19)

在式(3.19)中规定。该递推公式表明,欲确定第i个k次B样条基函数,需要用到共k+2个结点,称区间为的支持区间。B样条曲线方程中,n+1个控制点,要用到n+1个k次B样条基函数。它们支持区间的并集定义了这一组B样条基函数的结点向量。[02]一对分段函数相遇的点称为连结点(joints),发生在相遇时的t值称为结点(knot)。
[01]
(1)
一次B样条基函数
一次B样条基函数可由两个零次基函数和递推得到,是这两个零次基函
数的凸线性组合公式为

(3.20)
其中

将式(3.20)用分段函数表示,得
(3.21)
(2)
二次B样条基函数
二次B样条基函数是相邻两个一次B样条基函数的凸线性组合,即
(3.22)

类似可以递推出三次及更高次的B样条基函数。

通过以上递推定义可以看出B样条曲线基函数的特点:
l
B样条曲线基函数的次数与控制点的个数无关;
l
B样条曲线的基函数具有局部支承性,即其只在其支承区间内非零。

3.2.2
B-样条曲线的分类
B样条曲线按照结点向量中的结点分布情况不同,可分为均匀B样条曲线、开放均匀B样条曲线和非均匀B样条曲线3类。
(1)均匀周期性B样条曲线

当结点沿参数轴均匀等距分布,即=常数时,表示该B样条曲线为均匀B样条曲线。例如
,结点向量可取为T=(-2,-1.5,-1,-0.5,0,0.5,1,1.5,2)或T=(0,1,2,3,4,5,6,7)等。4段二次均匀B样条曲线的基函数如下图所示。

[02]
t
,
2
1
4
3
5
1
图3-11
四段三次均匀B样条基函数
从上图可以看出,均匀B样条的基函数呈周期性,即基函数在定义域内各个结点区间上都具有相同的形状,即
(3.23)

因此可将定义在每个结点区间上用整体参数t表示的B样条基函数换成用局部坐标参数表示。参数变换公式为

(3.24)

(3.25)
这样变换后使得所有区间上的B样条基函数都具有相同的数学表达式。
①二次均匀B样条曲线的分段表达式为(3.26)
其中,t
为参数,为对应的控制顶点,其基函数为
(3.27)

表示为矩阵形式如下:
(3.28)
其中
i=
0,1,2,…,n,共n-k段分段曲线,式中为分段曲线的特征多边形的顶点,为其中连续的3个顶点。二次均匀B样条曲线如下图所示。
P3
P0
P2
P1
P1,P2,P3
P4
i=0
P0,2(t)
i=1
P1,2(t)
图3-12
二次均匀B样条曲线
[02]
曲线的起点和终点值为
(3.29)

均匀二次B样条曲线起点和终点处的导数为
(3.30)
对于由任意数目的控制点构造的二次周期性B样条曲线来说,曲线的起始点位于头两个控制点之间,终止点位于最后两个控制点之间。对于高次多项式,起点和终点是k-1个控制点的加权平均值点。若某一控制点出现多次,样条曲线会更加接近该点。分段二次B样条曲线是一条抛物线;由n个顶点定义的二次B样条曲线,其实质上是n-2段抛物线(相邻三点定义)的连接,并在接点处达到一阶连续。
②三次均匀B样条曲线

分段三次均匀B样条曲线由相邻的4个顶点定义,其表达式为
(3.31)

可见,由n个顶点定义的完整的三次均匀B样条曲线是由n-3段分段曲线连接而成的。很容易证明,三次云均B样条曲线在连接处达到二次连续。三次均匀B样条曲线的基函数为

(3.32)

将三次均匀B样条曲线表示为矩阵形式为
(3.33)

4个控制点的三次均匀B样条的边界条件为

(3.34)

三次均匀B样条曲线如下图所示。

[03]图3-13
三次B样条曲线
可见,三次均匀B样条曲线从靠近处开始,在靠近处阶数。且每个曲线段的两个端点处的导数平行于相邻的控制点的连线。
(2)非均匀B样条曲线:在结点向量中使用多重结点
虽然均匀B样条曲线可以得到满意的效果,且算法的效率很高,但它仍存在一些不足,如不能贴切地反映控制顶点的分布特征;当型值点分布不均匀时,难以获得理想的插值曲线等。非均匀B样条曲线可以克服上述不足,但由于结点的分布不均匀,因此基函数不再具有平移性,基函数各不相同,因此,在生成曲线时,每个基函数都要单独计算,其计算量比均匀B样条曲线要大得多。
(3)开放B样条曲线:标准结点向量
均匀B样条曲线的首末端点不与控制顶点的首末点重合。当均匀B样条的次数高于二次时,在端点处也不再与控制多边形相切。开放均匀B样条保留了Bezier曲线的端点几何性质,可以更好的控制曲线的端点。
开放均匀B样条与均匀B样条的结点向量的差别在于两端结点。n次开放均匀B样条的结点向量中两端结点具有重复度为n+1,所有内结点均匀分布。因此除两端的n-1个结点区间外,n次开放均匀B样条与均匀B样条基函数具有相同的图形。
开放均匀B样条曲线是开放B样条曲线的特殊形式,其在计算和处理上比均匀B样条要复杂得多。[01][02]
3.2.3
B-样条曲线的性质

总结B-样条曲线及其生成曲线的主要性质很有用。Bezier曲线所具备的许多我们期望的性质B-样条曲线也具备。
l
局部支柱性
B样条的基函数是一个分段函数,其重要特征是在参数变化范围内,每个基函数在到的子区间内函数值不为零,在其余区间内均为零,通常也将该特征称为局部支柱性。即k次B样条曲线在参数的一段至多与k+1个控制点有关,与其他控制点无关,如图所示。
[02]
图3-14
B样条的局部支柱性
P
0
P
1
P
2
P
3
P″4
P
5
P
6
P
7
P
4
P′4l
B样条的凸组合性质
(3.35)
B样条的凸组合性和B样条基函数的数值均大于或等于0保证了B样条曲线的凸包性,即B样条曲线必处在控制多边形所形成的凸包之内。B样条曲线的凸包区域比同一组控制顶点定义的Bezier曲线的凸包要小,因此B样条曲线可以更加逼近特征多边形。
l
连续性
若一结点向量中结点均不相同,则m次B样条曲线在结点处为m-1阶连续。
B样条曲线基函数的次数与控制顶点个数无关。
重结点问题?:若在连接点的重复度为r,则k次B样条曲线在结点处为k-r次连续的。
l
导数曲线
由B样条曲线的基函数的微分公式

(3.36)
可以得出B样条曲线的导数曲线方程,即(3.37)
B样条曲线的导数曲线是一条k-1次的B样条曲线。
l
几何不变性
l
波动减小性[02]
使用多重控制点

可以通过在同一个点上防止几个控制点来改变B样条曲线的形状,同时产生一个多重控制点,该点对曲线有更强烈的吸引。[01]
3.2.4
有理样条和NURBS曲线

B样条曲线在表示与设计自由型曲线曲面形状时显式了强大的威力,然而在表示与设计由二次曲面构成的初等曲面时却遇到了困难。B样条曲线包括其特例的Bezier曲线都不能精确表示除抛物线和抛物面之外的二次曲线曲面,而只能给出近似表示。因此有必要将它们表示方法进行推广。有理形式是B样条曲线很自然的推广。推广后的形式保留了原来形式的许多特点,又将二次曲面、旋转面等包含在其中。
(1)
有理B样条曲线
有理B样条曲线是对B样条曲线的推广。称式()所示曲线是以为控制多边形,以
为权的m次有理B样条曲线,即
(3.38)
其中是与对应的权因子,一个特定控制点的权因子越大,曲线越靠近该控制点。首末权因子,其余,使得P(t)的分母不为0。式(3.38)中,是m次B样条曲线基函数。由于B样条曲线是分段多项式,因此经过加权后,有理B样条曲线是分段有理多项式。它具有与B样条曲线相同的凸包性、几何不变性、保凸性、变差缩减性、局部调整性、造型灵活性等性质。而B样条曲线是有理B样条曲线的特例,即各权全相等的有理B样条曲线。有理B样条曲线可以表示圆、椭圆等曲线,也可表示更复杂的曲线。
(2)
非均匀有理B样条曲线
在有理B样条曲线中应用最广泛的是非均匀有理B样条曲线(Nonuniform
Rational
B-Spline,
NURBS)。其结点向量为,结点个数是n+m+1(n为控制项的点数,m为B样条基函数的次数)。对于非周期NURBS曲线,常取两端结点的重复度为i,即
(3.39)
以二次NURBS曲线如何表示二次曲线为例进行说明:定义二次开放均匀B样条,取三个
控制顶点。则均匀结点向量T=(0,0,0,1,1,1),取权函数为
(3.40)

则有理B样条的表达式为

(3.41)

NURBS曲线也可用有理基函数的形式表示:

(3.42)

其中称为有理基函数。具有m阶B样条基函数类似的性质:
l
普遍性
l
局部支承性
l
权性
l
可微性
(3)
NURBS曲线的优点
l
既为标准解析形状(即前面提到的初等曲线曲面),又为自由型曲线曲面的精确表示与设计提供了一个公共的数学形式。
l
修改控制顶点和权因子,为各种形状设计提供了充分的灵活性。
l
具有明显的几何解释和强有力的几何配套技术(包括结点插入、细分、升阶等)。
l
对几何变换和投影变换具有不变性。
l
非有理B样条、有理与非有理Bezier方法是其特例。
(4)
NURBS曲线的性质
NURBS曲线与B样条曲线也具有类似的几何性质,如局部性质、变差减小性质、凸包性、在
仿射与投射变化下的不变性及在曲线定义域内与有理基函数有同样的可微性等。[02][01]
3.3
Bezier曲线和B-样条曲线的比较与相互转换
3.3.1
Bezier曲线和B-样条曲线的比较
Bezier曲线的次数为控制点个数减一;调和函数在上均不为零,不能作局部修改。虽然可以通过在点集中插入一些点来满足多段Bezier曲线的光滑连接条件,但这种方法显然很不方便。
由n个顶点确定的n-1次B样条曲线,通过彼此衔接,构成多个特征多边形生成的多条B样条曲线,各条B样条曲线间都能自动保持光滑连接,每在控制点序列中添加一个点都会生成一段B样条曲线,且与原有的曲线保持连续;B样条曲线具有局部支柱性,在参数变化范围内,每个基函数在到的子区间内函数值不为零,在其余区间内均为零。
3.3.2
Bezier曲线和B-样条曲线的相互转换

对于同一段曲线而言,既可以是n次的Bezier曲线,也可以是n次的B样条曲线。因此,当知道一段曲线作为Bezier的控制顶点时,可以求出它作为B样条曲线的控制顶点,反之亦然。

设一段曲线作为三次Bezier曲线的控制顶点为,作为B-样条曲线的控制顶点为。

三次Bezier曲线的矩阵形式:

(3.43)
可简写为(3.44)
三次B-样条曲线的矩阵形式:
(3.45)
可简写为:(3.46)
因二者表示同一条曲线,则有
(3.47)
则得到下面的关系

(3.48)
(3.49)
3.4
自由曲线是自由曲面的基础

自由曲线是由一系列曲线段如Hermite曲线段、Bezier曲线段、B样条曲线段连接而成的。与此类似,空间自由曲面可以由一系列曲面片拼合而成。也就是说,曲面片是曲面的基本单元。每个曲面片都需要采取双参数的函数表示,即
(3.50)

可以用三次参数方程表示曲面片,即
(3.51)

这样的曲面片称为双三次曲面片。当参数u固定时,参数v从0到1变化会得到一组互不相交的曲线;同理,若参数v固定,二参数u从0到1变化会得到另一组互不相交的曲线。这两组曲线相交构成空间网格,所有交点的几何构成曲面片。[03]
图3-15
双三次Bezier曲面及其控制网格
P
0,0
P
3,0
P
0,3
P
3,3
P
1,0
P
2,0
P
0,1
P
0,2
P
1,1
P
2,1
P
3,1
P
1,2
P
2,2
P
3,2
P
1,3
P
2,3
[02]第4章
结论
由于Bezier曲线的简洁性,我们先定义了Bezier曲线。这类曲线来自于迭代的de
Casteljau内插过程,根据这个生成过程,能够得到这类曲线的许多直观性质。这类曲线具有各种我们所希望的性质,是的其形状是可以预测的,因此能指导设计者安排控制点的位置。
在许多设计环境下,Bezier曲线都是有用的,但是由于其基础Bernstein多项式在整个参数区间上都有支持,所以这类曲线不允许局部控制。另外一个因素是复杂性,多项式的阶数随着控制点个数的增加而增加。这些特性使我们无法得到想要的形状,而且使得曲线计算代价太高,稳定性太低。因此我们介绍了更广泛的一类基于样条的混合函数,它是分段多项式的组合并且在各处的各阶导数都连续。作为一类特殊的基函数,B样条能够生成任何样条,并且是所有样条中范围最集中的。因此能够为设计者提供最强的局部控制能力,而且B样条还具备Bezier函数所具有的期望属性。当B样条多项式的阶数增加到所有控制点的个数时,这时的B样条基函数就变成了Bernstein多项式。
使用NURBS曲线能够更精细地控制曲线的形状。这类曲线比Bezier或B样条曲线复杂,而B样条是这类曲线的一个特例,而且这类曲线能够精确地表示圆锥曲线。支持NURBS算法的CAGD环境为设计者提供了创建各类不同形状曲线的统一工具。
样条曲线具有无限的生命力。通过寻找更好的参数条件,研究参数对曲线的具体影响,再对其作调整和改变,找到更具可调性的曲线,并将各类曲线推广至三边曲面等。



本文是在我尊敬的导师老师悉心指导下完成的。在写毕业论文期间,导师的言传身教使我受益匪浅。她和蔼的态度、严谨的学风、兢兢业业、一丝不苟的工作作风、对创新的重视精神将使我受益终身。张老师一直给予我悉心的指导和帮助,使我对论文中的各个知识点有了较为全面的理解和掌握。在本文完成之际,在此特向我的导师表示衷心的感谢!
在大学四年的学习生活中,数计系的各位老师,在学习和生活上为我提供了许多帮助和便利条件,在此向他们表示我最衷心的感谢!
感谢我所有的同窗好友,感谢他们在生活和学习上对我的关心、指导和帮助!
衷心地感谢我的家人几年来对我的关心、支持和照顾,使我能全身心地投入到学习当中,按时完成学业!
最后,再次向所有关心过、支持过和帮助过我的人表示衷心的感谢!
参考文献
[1](美)希尔(HILL,F.S.)著.计算机图形学——用OpenGL实现(第2版)
[M].罗霄等译.北京:清华大
学出版社,2006:601-675.
[2]张曦煌,杜俊俐.计算机图形学[M].北京:北京邮电大学出版社,2006:146-175.
[3]徐文鹏.计算机图形学[M].北京:机械工业出版社,2009:58-84.
[4]高晶.Bezier曲线的算法研究[N].辽宁师专学报,2008-06(第2期第10卷).
[5]孔令德.计算机图形学实践教程:Visual
C++版[M].北京:清华大学出版社,2008:
164-171,184-192.
[6]
Evgeny
Demidov.交互式样条简介[EB/OL].
http://.cn/book/Showbook.asp?CPBH=022432-01&DJ=30,2009-05-26.
[16]杨钦.计算机图形学[EB/OL].
http://.cn/book/Showbook.asp?CPBH=009636-01&DJ=22,2009-01-06.
[17]陆润民.计算机图形学教程[EB/OL].
http://.cn/book/Showbook.asp?CPBH=006242-01&DJ=19,2006-04-06.
[18]孙家广、胡事民.计算机图形学基础教程(第2版)[EB/OL].

http://.cn/book/Showbook.asp?CPBH=033740-01&DJ=23,2009-10-14.


1.
Bezier曲线算法流程图:2.
三次Bezier曲线的绘制
四个控制点生成三次Bezier曲线的示例代码。(Point类的定义)
//绘制由p0,p1,p2,p3确定的Bezier曲线
//参数区间[0,1]被离散为count份
Void
BezierCurve(Point
p0,Point
p1,Point
p2,Point
p3,int
count)
{
double
t
=
0.0;
dt
=
1.0
/
count;

moveto(p1.x,p2.x);
//设置起点
for(int
i=0;
ii++)
{

t+=dt;

double
F1,F2,F3,F4;
//调和函数

double
u
=
1.0

t
;

F1
=
u
*
u
*
u
;

F2
=
3
*
t
*
u
*
u;

F3
=
3
*
t
*
t
*
u;
F4
=
t
*
t
*
t;

x
=
p0.x
*
F1
+
p1.x
*
F2
+
p2.x
*
F3
+
p3.x
*
F4;

y
=
p0.y
*
F1
+
p1.y
*
F2
+
p2.y
*
F3
+
p3.y
*
F4;

lineto(x,y);}
}[03]
3.
三次均匀B样条曲线算法的流程图:4.
三次均匀B样条曲线的绘制
四个控制点绘制生成一段B样条曲线的函数代码。(Point类的定义)
//绘制由p0,p1,p2,p3确定的B样条曲线段
//参数区间[0,1]被离散为count份
Void
B_SpLine(Point
p0,Point
p1,Point
p2,Point
p3,int
count)
{double
t
=
0.0;dt
=
1.0
/
count;moveto(p1.x,p2.x);
//设置起点for(int
i=0;
ii++)
{
t+=dt;
double
F1,F2,F3,F4;
//调和函数
double
u
=
1.0

t
;
F1
=
-
t
*
t
*
t
+
3
*
t
*
t

3
*
t
+
1;
F2
=
3
*
t
*
t
*
t

6
*
t
*
t
+
4;
F3
=
-3
*
t
*
t
*
t
+
3
*
t
*
t
+
3
*
t
+
1;
F4
=
t
*
t
*
t;
x
=
p0.x
*
F1
+
p1.x
*
F2
+
p2.x
*
F3
+
p3.x
*
F4;
y
=
p0.y
*
F1
+
p1.y
*
F2
+
p2.y
*
F3
+
p3.y
*
F4;
x/=6.0;
y/=6.0;
lineto(x,y);
}
}[03]

Bezier和B-样条曲线的算法研究 本文关键词:算法,曲线,研究,Bezier

Bezier和B-样条曲线的算法研究  来源:网络整理

  免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。


Bezier和B-样条曲线的算法研究》由:76范文网互联网用户整理提供;
链接地址:http://www.yuan0.cn/a/87794.html
转载请保留,谢谢!
相关文章