资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,计算机图形学10_曲线曲面参数表示的基础知识,曲线曲面概述,图形学中一个很复杂的又非常重要的研究领域。,曲线曲面才是造型的真正统治者,它占据了我们生活和幻想中的造型的绝大部分。,但曲线曲面又是如此地难以理解,让人们在一段很长很长的时间内无法征服它。,曲线曲面概述,自由曲线和曲面发展过程,自由曲线曲面的最早是出现在工作车间,为了获得特殊的曲线,人们用一根富有弹性的细木条或塑料条(叫做样条),用压铁在几个特殊的点(控制点)压住样条,样条通过这几个点并且承受压力后就变形为一条曲线。人们调整不断调整控制点,使样条达到符合设计要求的形状,则沿样条绘制曲线。,1963年,美国波音,弗格森提出使用参数三次方程来构造曲面,1964-1967年,美国MIT,孔斯用封闭曲线的四条边界来定义曲面,1971年,法国雷诺汽车,Bezier提出用控制多边形来定义曲线和曲面,1974年,美国通用汽车,戈登和里森菲尔德,B样条理论用于形状描述,1975年,美国锡拉丘兹大学,佛斯普里尔提出有理B样条,80年代,皮格尔和蒂勒,将有理B样条发展成非均匀有理B样条,NURBS方法,目录,曲线曲面概述,曲线、曲面参数表示的基础知识,曲线构造方法,三次参数曲线,Beizer曲线,B样条曲线,显式、隐式,和参数表示,曲线和曲面都有非参数表示和参数表示之分,在非参数中又分为显式和隐式表示,(1)显式,一般形式:y,=,f,(,x,),注:x 与y一一对应,显示方程不能表示封闭和多值曲线。,(2)隐式,一般形式:,f,(,x,y,),=,0,注:易判断某给定点是在曲线上还是曲线某一侧。,非参数表示形式(显示和隐式)存在,如下问题,:,与坐标有关,出现斜率为无穷大的特殊情形,对于非平面曲线,曲面,难于用常系数的非参数化函数表示,不便于计算机处理,参数表示形式优点:,满足几何不变性要求,更多自由度参数控制曲线与曲面形状,例:二维三次曲线显示表示:,二维三次曲线参数表示:,(3)参数,一般形式:,P(t)=x(t),y(t),注:曲线上任意一点都可表示为给定参数t的函数。,最简单的参数曲线是直线段,端点为P,1,、P,2,的直线段参数方程可表示为:,P(t)=P,1,+(P,2,-P,1,)t t0,1;,圆在计算机图形学中应用十分广泛,其在第一象限内的单位圆弧的非参数显式表示为:,其参数形式可表示为:,(,4,)便于处理斜率为无限大的问题,不会因此而中断计算。,(6)规格化的参数变量,t,0,,,1,,使其相应的几何分量是有界的,而不必用另外的参数去定义其边界。,(5)参数方程中,代数、几何相关和无关的变量是完全分离的,而且对变量个数不限,从而便于用户把低维空间中的曲线扩展到高维空间去。,(7)易于用矢量和矩阵表示几何分量,简化了计算。基于这些优点,我们在以后将用参数表达式来讨论曲线问题。,(,3,)对非参数表示的曲线和曲面进行变化时,必须对所有点进行变化;对参数表示的曲线和曲面则可直接对参数方程变化。,5.1.2,参数样条曲线和曲面的常用术语,在工程设计中,一般多采用低次的参数样条曲线。这是因为高次参数样条曲线计算费时,其数学模型难于建立且性能不稳定,即任何一点的几何信息的变化都有可能引起曲线形状复杂的变化。,因此,实际工作中常采用二次或三次参数样条曲线,如:,二次参数样条曲线:,P,(,t,)=,A,0,+,A,1,t,+,A,2,t,2,三次参数样条曲线:,P,(,t,)=,A,0,+,A,1,t,+,A,2,t,2,+,A,3,t,3,参数曲线相关术语,用参数表示的3维曲线是一个有界的点集,可以写成一个带参数的、连续的、单值的数学函数,形式为:,x=x(t),y=y(t),z=z(t)t,0,1,位置矢量,:曲线上任意一点的位置矢量(即坐标),可以用矢量p(t)表示,p(t)=x(t),y(t),z(t),为什么选参数t呢,物理上可以把3维空间的曲线理解为一个动点的轨迹,表示位置矢量p随时间变化,那么,它的一阶,二阶,K阶(如果存在)导数分别为,参数曲线相关术语,切矢量,曲线上R,Q两点参数分别是t和t+,t.,当Q趋向R,也就是,t,0,导数 的方向P(t)就代表了R点的切线方向,导数 的大小就可以近似表示,P的长度也可以近似表示这一段弧长,S,切矢量,如果选择弧长S作为参数,则,是,单位矢量,参数曲线相关术语,弧长,当n,可以把弧长表示为无数段p0p1,p1p2.的长度组成,而当p0与p1的 t0时,p0p1可以近似的表示为,于是从0到t的弧长可以表示为:,参数曲线基础,参数曲线相关术语,法矢量,对于空间参数曲线上的任意一点,所有垂直切矢量T的矢量有一束,且位于同一平面上,该平面称为,法平面,。,T(切矢)、N(主法矢)和B(副法矢),矢量积 是第三个单位矢量,它垂直于单位矢量 和单位矢量 。经该点与矢量 平等的法矢量称为曲线在该 点的副法矢量,矢量 称为,单位副法矢量,。,(,从切面,),5.1参数曲线基础,参数曲线相关术语,曲率和曲率半径:,曲率几何意义是曲线的单位切矢对弧长的转动率,即P(s)到P(s+ds)这段弧的弯曲程度。,参数曲线基础,参数曲线相关术语,挠率,:,等于副法线方向(或密切平面)对于弧长的转动率,反应了曲线的扭绕特性。,平面曲线中密切平面是曲线所在平面,所以副法矢固定不变,所以绕率总是=0,非平面曲线副法矢变化了,会对曲线产生扭动的效果。,T(切矢)、N(主法矢)和B(副法矢),曲线构造方法,插值法,给定一组有序的数据点Pi,i=0,1,n,构造一条曲线顺序通过这些数据点,称为对这些数据点进行,插值,,所构造的曲线称为,插值曲线,。,逼近法,构造一条曲线使之在某种意义下最接近给定的数据点(但未必通过这些点),称为对这些数据点进行,逼近,,所构造的曲线称为,逼近曲线,。,插值,和,逼近,统称为,拟合。,曲线构造方法,在前面的插值法中,如果给定的点(型值点)太多,很难构造插值函数,因此可适当放弃一些型值点。,型值点:是用于确定曲线和曲面的位置与形状,且相应曲线或曲面,一定经过的点,。,控制点:是用于确定曲线和曲面的位置与形状,但相应曲线或曲面不一定经过。,插值点:是在型值点或控制点值之间插入的一系列点。,曲线构造方法,插值法,线性插值:假设给定函数f(x)在两个不同点x1和x2的值,用线形函数 y=ax+b,近似代替f(x),称为的线性插值函数。,插值法,抛物线插值(二次插值):,已知在三个互异点x1,x2,x3的函数值为y1,y2,y3,要求构造函数,(x)=ax,2,+bx+c,使得,(x)在xi处与f(x)在xi处的值相等。,曲线构造方法,光顺:,曲线拐点不能太多。对平面曲线来讲,相对光顺的条件是:,具有二阶几何连续性,不存在多余的拐点和奇异点,曲率变化较小,参数连续性,零阶参数连续性,记作C0,指相邻两个曲线段在交点处具有相同的坐标。如图所示。,一阶参数连续性,记作C1,指相邻两个曲线段在交点处具有相同的一阶导数。如图所示。,二阶参数连续性,记作C2,指相邻两个曲线段在交点处具有相同的一阶和二阶导数。如图所示。,目录,曲线曲面概述,参数曲线基础,曲线构造方法,二次插值样条曲线,三次样条参数曲线(,Hermite,Cardinal样条曲线,),Beizer曲线,B样条曲线,二次插值,样条曲线,二次插值样条曲线的数学表达式,在拟合生成样条曲线的众多方法中,我们首先选择较为简单的二次样条曲线即抛物样条曲线的生成方法作为基本方法,来讨论如何用插值方法生成通过给定离散型值点的样条曲线。,由于离散点的要求,我们首先要解决由给定点定义抛物线问题。设有不在同一直线上的三点:,P,1,P,2,P,3,,现在要求通过该给定的三点定义一条抛物线。如图所示。,P,1,P,2,P,3,图 过三点的二次曲线,假如我们采用矢量表达式来表示参数化的二次曲线,那么可以把抛物线的表达式写成如下的一般形式为:,P,(,t,),=,A,1,+,A,2,t,+,A,3,t,2,(,0,t,1,),(6-1),抛物线是一条二次曲线,所以表达式中参数,t,的最高次数为,2,,同时让参数,t,在,0l,之间取值。,这就是说,只要确定了式(,61),中的三个系数:,A,1,A,2,和,A,3,,那么就确定了抛物线的表达式,随之抛物线的曲线图形也就可以确定。所以,我们的工作是要通过设定一些已知条件来求出这三个系数。,要确定这三个系数(目前尚为未知数),必须要有三个独立的条件。我们可以给定这三个独立条件为:,该抛物线过,P,1,,,P,2,,,P,3,三个点,并且:,抛物线段以,P,1,点为始点。即当参变量,t,=0,时,曲线过,P,1,点;,抛物线段以,P,3,点为终点。即当参变量,t,=1时,曲线过,P,3,点;,当参变量,t,=0.5,时,曲线过,P,2,点。,在这三个设定的条件下,构造的抛物线段如图,6.3,所示。,P,1,P,2,P,3,Q,A,P,2,t,=0,t,=0.5,t,=1,图6.3 过3点定义的二次曲线,图中的数据是这样的:,A,点为,P,1,P,3,的中点,,AP,2,=,P,2,Q,,抛物线在,P,1,点处与,P,1,Q,相切,在,P,3,点处与,QP,3,相切,曲线在,P,2,点处的切矢,P,2,与,P,1,P,3,平行。,根据以上设定的条件,可以列出三个方程:,t,=,0:,P,(0)=,A,1,=,P,1,t,=,1:,P,(1)=,A,1,A,2,十,A,3,=,P,3,(6-2),t,=,0,.,5,;,P,(,0,.,5,),=,A,1,0,.,5,A,2,0,.,25,A,3,=,P,2,解以上三个联立方程:,A,1,=,P,1,P,3,=,A,1,+,A,2,+,A,3,=,P,1,A,2,+,A,3,A,2,=,P,3,P,1,A,3,P,2,=,A,1,+,0,.,5,A,2,+,0,.,25,A,3,亦即:4,P,2,=,4,A,1,+,2,A,2,+,A,3,=,4,P,1,+,2(,P,3,P,1,A,3,),+,A,3,=,2,P,1,+,2,P,3,A,3,A,3,=,2,P,1,+,2,P,3,4,P,2,以上式回代到,A,2,=,P,3,P,1,A,3,中,得:,A,2,=,4,P,2,P,3,3,P,1,所以,通过解联立方程,得到的三个系数,A,1,,,A,2,,,A,3,分别为:,A,1,=,P,1,A,2,=,4,P,2,P,3,3,P,1,(6-3),A,3,=,2,P,1,2,P,3,4,P,2,把求出的该三个系数的值,代入到抛物线的表达式(,6-1),中,可得:,P,(,t,)=,A,1,+,A,2,t,+,A,3,t,2,=,P,1,+(4,P,2,P,3,3,P,1,),t,+,(2,P,1,2,P,3,4,P,2,),t,2,=,(2,t,2,3,t,+,1),P,1,+(4,t,4,t,2,),P,2,+,(2,t,2,t,),P,3,(6-4),(,0,t,1,),可把式(6-4)改写成矩阵形式为:,P,(,t,)=,t,2,t,1,(6-5),以上推导求出的算式,即为我们所要求的过不在一直线上的三点:,P,1,(,x,1,y,1,),,P,2,(,x,2,y,2,)和,P,3,(,x,3,y,3,)的抛物线方程。这时根据参变量,t,的取值,我们就可以一一计算出位于曲线上的数据点,然后顺次连线绘出图形。,二次插值样条曲线的加权合成,设有一离散型值点列,P,i,(,i,=1,2,n,),我们可以按式,(6-5),每经过相邻三点作一段抛物线,由于有,n,个型值点,所以像这样的抛物线段一共可以作出,n,2,条。如图,6.4,所示。,P,1,P,2,P,3,P,4,P,5,P,n,-2,P,n,-1,P,n,图6.4 产生,n,2段抛物线,在这,n,2条抛物线段中,第,i,条抛物线段为经过,P,i,,,P,i,+1,,,P,i,+2,三点,所以它的表达式应为:,S,i,(,t,i,)=(2,t,i,2,3,t,i,+1),P,i,+(4,t,i,4,t,i,2,),P,i,+1,+(2,t,i,2,t,i,),P,i,+2,(0,t,i,1),(6-7),同理,第,i,+1条抛物线段为经,P,i,+1,,,P,i,+2,和,P,i,+3,三点,所以它的表达式为:,S,i,+1,(,t,i,+1,)=(2,t,i,+1,2,3,t,i,+1,+1),P,i,+1,+(4,t,i,+1,4,t,i,+1,2,),P,i,+2,+(2,t,i,+1,2,t,i,+1,),P,i,+3,(0,t,i+1,1),(,6-8,),经过四点所画出的两条抛物线段,S,i,(,t,i,),和,S,i,+1,(,t,i,+1,),的图形如图,6.5,所示:,P,i,P,i,+1,P,i,+2,P,i,+3,S,i,S,i,+1,图6.5,S,i,和,S,i,+1,一般说来,每两段曲线之间的搭接区间,两条抛物线是不可能重合的。例如图,6.5,中,,S,i,和,S,i,+1,两条抛物线,它们在,P,i,+1,和,P,i,+2,两点之间为搭接区间,在这区间内,,S,i,和,s,i,+1,不太有可能会自然地重合成一条曲线。,显然,对于拟合曲线来说,整个型值点列必须只能用一条光滑的曲线连接起来。为了做到这一点,在,S,i,和,s,i,+1,这样两条曲线的共同区间内,必须有一个办法让它们按照一个一定的法则结合成一条曲线,这结合的办法就是加权合成。,在加权合成的过程中,我们首先要选择两个合适的权函数。如果我们在这里选择的两个权函数分别为,f,(,T,)和,g,(,T,),加权合成后的曲线为,P,i,+1,(,t,),则:,P,i,+1,(,t,),=,f,(T),S,i,(,t,i,),+,g,(,T,),S,i,+1,(,t,i,+1,),在抛物样条曲线中,我们选择的权函数,f,(,T,)和,g,(,T,)是简单的一次函数,且它们之间存在有互补性。它们分别为:,f,(,T,)=l,T,g,(,T,)=,T,(O,T,1),这样,式:,P,i,+1,(,t,)=,f,(T),S,i,(,t,i,),g,(,T,),S,i,+1,(,t,i,+1,)即可改写为:,P,i,+1,(,t,)=(1,T,),S,i,(,t,i,),T,S,i,+1,(,t,i,+1,)(6-9),在表达式(,6-9,)中,包含了三个参变量,即:,T,、,t,i,和,t,i,+1,。假如这三个参变量不加以统一,则接下去的工作是无法进行的,所以我们首先要统一式中的参变量。,对于曲线段,S,i,(,t,i,),,参变量,t,i,的取值范围为:,0,t,i,1,,但曲线段,S,i,(,t,i,),与曲线段,S,i,+1,(,t,i,+1,),搭接的部分是原曲线段的后半截,即是从点,P,i,+1,到,P,i,+2,之间的区间,在这个区间内,参变量的取值范围应为:,0.5,t,i,1,。,同理,对于曲线段,S,i,+1,(,t,i,+1,),在点,P,i,+1,到,P,i,+2,之间的区间内,其参变量,t,i,+1,的取值范围应为:0,t,i+1,0.5。,在权函数,f,(,T,)和,g,(,T,)中,变量,T,的取值范围定为:,0,T,1,。,为了统一式(,6-9),中的三个参变量:,T,、,t,i,和,t,i,+1,,我们选择,t,作为统一后的参变量,把原有的三个参变量,T,、,t,i,和,t,i,+1,均化成唯一含有,t,的形式,并要给,t,规定一个合适的取值范围。假如我们使,t,的取值范围为:,0,t,0.5,,则上面的三个参变量可统一形式为:,P,i,P,i,+1,P,i,+2,P,i,+3,S,i,S,i,+1,T,=2,t,t,i,=0.5,t,0,t,0.5,t,i,+1,=,t,于是,原式(6-9)可根据新的参变量,t,改写成如下这样的形式:,P,i,+1,(,t,)=(1 2,t,),S,i,(,t,+0.5),2,t,S,i,+1,(,t,)(6-10),其中:,12,t,=,f,(T),2,t,=,g,(,T,),S,i,(,t,0.5)=(2,t,2,t,),P,i,+(14,t,2,),P,i,+1,+(2,t,2,t,),P,i,+2,S,i,+1,(,t,),=,(,2,t,2,3,t,1,),P,i,+1,+(,4,t,4,t,2,),P,i,+2,+(,2,t,2,t,),P,i,+3,把以上四式代入式(6-10),展开、整理后可得:,P,i,+1,(,t,)=(4,t,3,+4,t,2,t),P,i,+(13,t,3,10,t,2,+1),P,i,+1,+(12,t,3,+8,t,2,t,),P,i,+2,+(4,t,3,2,t,2,),P,i,+3,(,i,=1,,,2,,,,,n,3),(,0,t,0.5,),(,6-11,),式(,6-11),的实质是:表达了每相邻的四个点可以决定中间的一段抛物样条曲线。见图,6.6,所示。,P,i,P,i,+1,P,i,+2,P,i,+3,P,i,+1,(,t,),图6.6 4个点决定中间的一段样条曲线,假如一个离散点列,P,i,具有,n,个型值点,即,i,=1,,,2,,,,,n,。那么根据式(,6-11),,可以加权合成后生成,n,3,段抛物样条曲线。即式(,6-11),中的,i,的取值范围为:,i,1,n,3,。,目录,曲线曲面概述,参数曲线基础,曲线构造方法,二次插值样条曲线,三次样条参数曲线,(,Hermite样条曲线,),Beizer曲线,B样条曲线,三次参数样条曲线,三次参数曲线的代数和几何形式(294),代数形式,我们以最常见的,三次参数曲线,为例,讨论参数曲线的代数和几何形式。,下面为一般的三次参数曲线的,代数形式,:,从a,3x,到a,0 x,有12个系数为,代数系数,,它们确定了这条参数曲线的形状和位置。,系数不同则曲线不同,。,把它改写为矢量表达:,三次参数样条曲线,三次参数曲线的代数和几何形式,代数形式,把前面的代数方程改写为矢量形式,P(t)表示曲线上任一点的位置矢量;系数a,0,表示(a,0 x,a,0y,a,0z,),我们尝试用已知条件来求解这些系数。可供选择的已知条件有:,端点坐标、端点坐标的切矢量,、法矢量、曲率、挠率等等。对于上面的三次参数曲线,我们使用4个已知条件即可:P(0),P(1),P(0),P(1),三次参数样条曲线,三次参数样条,Hermite,曲线的代数和几何形式,几何形式,对三次参数样条曲线,若用其端点位矢P(0)、P(1)和切矢P,(0)、P,(1)描述。,将,P(0)、P(1)、P,(0),和,P,(1),简记为,P,0,、P,1,、P,0,和,P,1,,代入,三次参数样条曲线,三次参数样条曲线,令,称为Hermite矩阵,插值样条参数方程可以写成:,三次参数样条曲线,上式展开,其中,上式称为Hermite样条调和函数,因为它们调和了边界约束值,使在整个参数范围内产生曲线的坐标值。调和函数仅与参数t有关,而与初始条件无关。,三次参数样条曲线,三次参数样条曲线,例:给定9个型值点,其中起始点和终止点是同一个点,从而其特征多边形是一个首尾相接的封闭多边形,具体坐标位置如下:,(100,300),(120,200),(220,200),(270,100),(370,100),(420,200),(420,300),(220,280),(100,300),假定各点处的一阶导数数值如下:,(70,-70),(70,-70),(70,-70),(70,-70),(70,70),(70,70),(-70,70),(-70,70),(70,-70),用Hermite插值方法绘制曲线。,解:p0=(100,300),p1=(120,200),p0=(70,-70),p1=(70,-70),For(t=0;t=1;t=t+0.1)或,For(t=0;t,P(t)=-6P(0)+6P(1)-3P(0)-3P(1)-P”(0)/2+P”(1)/2 t,5,+15P(0)-15P(1)+8P(0)+7P(1)+3P”(0)/2 t,4,+-10P(0)+10P(1)-6P(0)-4P(1)-3P”(0)/2+P”(1)/2 t,3,+P”(0)/2 t,2,+P(0)t,+P(0),整理得:,P(t)=(-6t,5,+15t,4,-10t,3,+1)P(0)+(6t,5,-15t,4,+10t,3,)P(1),+(-3t,5,+8t,4,-6t,3,+t)P(0)+(-3t,5,+7t,4,-4t,3,)P(1),+(-t,5,/2+3t,4,/2-3t,3,/2+t,2,/2)P”(0)+(t,5,/2-t,4,+t,3,/2)P”(1),故调和函数为:,F(0)=-6t,5,+15t,4,-10t,3,+1,F(1)=6t,5,-15t,4,+10t,3,F(2)=-3t,5,+8t,4,-6t,3,+t,F(3)=-3t,5,+7t,4,-4t,3,F(4)=-t,5,/2+3t,4,/2-3t,3,/2+t,2,/2,F(5)=t,5,/2-t,4,+t,3,/2,系数矩阵为:,-6 6-3-3-1/2 1/2,15-15 8 7 3/2 -1,-10 10-6-4-3/2 1/2,0 0 0 0 1/2 0,0 0 1 0 0 0,1 0 0 0 0 0,习题2,试求两段三次Hermite曲线达C1连续的条件,解:两段三次Hermite曲线分别为:,Q,1,(t,1,)=a,3,t,1,3,+a,2,t,1,2,+a,1,t,1,+a,0,t,1,0 1,Q,2,(t,2,)=b,3,t,2,3,+b,2,t,2,2,+b,1,t,2,+b,0,t,2,0 1,依据C1连续充要条件为:,Q,1,(1)和Q,2,(0)在P点处重合,,且其在P点处的切矢量方向相同,大小相等,即Q,1,(1)=Q,2,(0),Q,1,(1)=Q,2,(0),Q,1,”(1)=Q,2,”(0),而 Q,1,(1)=a,3,+a,2,+a,1,+a,0,Q,2,(0)=b,0,Q,1,(t,1,)=3a,3,t,1,2,+2a,2,t,1,+a,1,Q,2,(t,2,)=3b,3,t,2,2,+2b,2,t,2,+b,1,则:Q,1,(1)=3a,3,+2a,2,+a,1,Q,2,(0)=b,1,Q,1,”(t,1,)=6a,3,t,1,+2a,2,Q,2,”(t,2,)=6b,3,t,2,+2b,2,Q,1,”(1)=6a,3,+2a,2,Q,2,”(0)=2b,2,=两段三次Hermite曲线:,Q,1,(t,1,)=a,3,t,1,3,+a,2,t,1,2,+a,1,t,1,+a,0,t,1,0 1,Q,2,(t,2,)=b,3,t,2,3,+b,2,t,2,2,+b,1,t,2,+b,0,t,2,0 1,要达到C1连续,其系数必须满足下列关系式:,a,3,+a,2,+a,1,+a,0,=b,0,3a,3,+2a,2,+a,1,=b1,6a,3,+2a,2,=2 b,2,6.2,Bezier,曲线,前面讨论过的三次参数样条曲线通过给定的型值点,属于样条插值曲线,适合于已知曲线上的某些点而生成曲线的情形。但在外形设计时,初时给出的型值点有时并不精确,由给定的型值点生成的样条曲线并不能满足性能或美观的要求,需要加以修改。但多数插值样条曲线作为外形设计工具不能直观地表示出应该如何控制和修改曲线的形状,缺少灵活性和直观性。法国雷诺汽车公司工程师P.E.Bezier在1962年提出了一种新的参数曲线表示方法,称为Bezier曲线。这种方法的特点是所输入型值点与生成曲线之间的关系明确,能比较方便地通过修改输入参数来改变曲线的形状和阶次。,在该多边折线的各顶点中,只有第一点和最后一点是在曲线上的,,其余的顶点则用来定义曲线的导数、阶次和形状,。第一条边和最后一条边则表示出了曲线在起点处和终点处的切线方向,即第一条边和最后一条边分别和曲线在起点和终点处相切。曲线的形状趋向于多边折线的形状。改变多边折线的顶点位置和曲线形状的变化有着直观的联系。下图列举了一些,Bezier,多边折线和相应的,Bezier,曲线的形状关系。,P,0,P,1,P,2,P,3,P,0,P,1,P,2,P,3,P,0,P,1,P,2,P,3,图 Bezier曲线,Bezier曲线是由一组多边折线定义的,在多边折线的各顶点中,只有第一点和最后一点在曲线上,第一条和最后一条折线分别表示出曲线在起点和终点处切线方向,。曲线的形状趋向于多边折线的形状,因此,多边折线又称为,特征多边形,,其顶点称为,控制点,。,6.2.1,Bezier,曲线的数学表达式,1.数学表达式,Bezier曲线次数严格依赖于确定该段曲线的控制点个数,通常由(n1)个顶点定义一个n次多项式,曲线上各点参数方程式为:,在式(6-21)中,,P,i,为各顶点的位置向量,,B,i,n,(,t,)为伯恩斯坦(Bernstein)基函数,该函数的表达式为:,n次多项式曲线P(t)称为n次Bezier曲线,Bezier曲线及其特征多边形图例:,一次Bezier曲线(n=1),二次Bezier曲线(n=2),三次Bezier曲线(n=3),2.Bezier曲线的性质,(1),曲线的起点和终点同特征多边形的起点和终点重合,对Bernstein多项式有:,当t0时,只有i0的项不为 0,其它项都为t,i,0,i,0,因此,其中规定:0!=1,0,0,=1。,当 t1 时,只有in 的项不为0,其它项为(1-t),n-i,0,n-i,0,因此,P(1)=P,0,B,0,n,(1)+P,1,B,1,n,(1)+P,2,B,2,n,(1)+P,n,B,n,n,(1),从以上结果可以得出,,曲线通过多边折线的起点和终点,。,(2)一阶导数,对参数t求导得:,于是得:,(,6-23,),在起始点t0,B,0,n-1,(0)1,其余项均为0,故有:,P,(0)n(P,1,P,0,),在终止点t1,B,n-1,n-1,(1)1,其余项均为0,故有:,P,(1)=n(P,n,P,n-1,),即,Bezier曲线在端点处的一阶导数只同相近的两个控制点有关,其方向相同于两点的连线方向,。,(3)二阶导数,对参数t求二阶导数可得:,在起始点t0处的二阶导数为:,P,”,(0)n(n1)(P,2,2P,1,P,0,),=n(n-1)(P,2,P,1,)-(P,1,-P,0,),在终止点t1处的二阶导数为:,P,”,(1)n(n1)(P,n,2P,n-1,P,n-2,),=n(n-1)(P,n-2,P,n-1,)-(P,n-1,P,n,),结论:,Bezier曲线在端点处的二阶导数只同相近的三个控制点有关。,那么,,Bezier曲线在端点处的r阶导数是由端点和它们r个邻近的控制多边形顶点来决定。,(4)凸包性,Bezier曲线的另一个重要性质是它落在特征多边形顶点所形成的,凸包,内。即在几何图形上,当特征多边形为凸时,Bezier曲线也是凸的;当特征多边形有凹有凸时,其曲线的凸凹形状与之对应。Bezier曲线的凸包性质保证了,多项式曲线随控制点平稳前进而不会振荡,。,(5)几何不变性,由Bezier曲线的数学定义式知,曲线的形状由特征多边形的顶点P,i,(i0,1,.,n)唯一确定,与坐标系的选取无关,这就是几何不变性。,(6)对称性,假设保持n次控制多边形的顶点位置不变,而把次序颠倒过来,即下标为i的控制点P,i,改为下标为n-i的控制点P,n-i,,则此时曲线仍不变,只不过曲线的走向相反而已。,6.2.2,二次Bezier曲线,顶点,P,0,,,P,1,,,P,2,可定义一条二次(,n,=2)Bezier曲线。此时式(6-21)可以改写成:,P,(,t,),=(1,t,),2,P,0,2,t,(,1,t,),P,1,t,2,P,2,(,0,t,1,),(6-24),写成矩阵形式为:,P,(,t,)=,t,2,t,1,在式(6-24)中,相对应于式(6-21)中的调和函数,B,i,n,(,t,)分别为:,B,0,2,(,t,)=12,t,t,2,B,1,2,(,t,)=2,t,t,2,B,2,2,(,t,),=,t,2,根据式(6-24),当,n,=2时,二次,Bezier,曲线在起点,P,0,处有切向量,P,0,=,P,(,t,=0),=2(,P,1,P,0,);在终点,P,2,处有切向量,P,2,=,P,(,t,=1),=2(,P,2,P,1,)。同时,当,t,=1/2时:,该式说明,二次,Bezier,曲线经过,P,0,P,1,P,2,中的一条中线,P,1,P,m,的中点,P,。综上所述,我们可以看出:二次Bezier曲线是一条抛物线。见下图所示。,P,1,P,0,P,2,P,m,P,二次Bezier曲线,73,6.2.3三次Bezier 曲线,一般地说,可以用任何数目的控制点拟合出一条Bezier曲线,但这需要计算更高次的多项式。复杂曲线可以由一些较低次数的Bezier曲线段连接而成,较小的,曲线,段连接也便于更好地控制小区域内的曲线形状,最常使用的是三次Bezier曲线。,三次Bezier曲线由四个控制点P,0,、P,1,、P,2,、P,3,定义:,74,展开后的表达式为:,P(t)=(-t,3,3t,2,3t1)P,0,+(3t,3,6t,2,3t)P,1,+(-3t,3,3t,2,)P,2,t,3,P,3,=B,0,3,(t)P,0,+B,1,3,(t)P,1,+B,2,3,(t)P,2,B,3,3,(t)P,3,其中,B,0,3,(t),-t,3,3t,2,3t1,B,1,3,(t),3t,3,6t,2,3t,B,2,3,(t),-3t,3,3t,2,B,3,3,(t),t,3,称为三次Bezier曲线的调和函数,下图表示出调和函数的四条曲线。这四条曲线形成了三次Bezier曲线的一组基,任何三次Bezier曲线都是这四条曲线的线性组合。,75,三次Bezier曲线的调和函数:,76,三次Bezier曲线函数式,用矩阵形式表示为:,是三次Bezier,系数矩阵。,77,三次Bezier曲线的在端点处的一阶导数为:,P,(0)3(P,1,P,0,),P,(1)=3(P,3,P,2,),二阶导数为:,P,”,(0)6(P,2,2P,1,P,0,),P,”,(1)6(P,3,2P,2,P,1,),三次Bezier曲线函数式,分别写成坐标分量的形式如下:,x(t),(-t,3,3t,2,3t1)x,0,(3t,3,6t,2,3t)x,1,(-3t,3,3t,2,)x,2,t,3,x,3,y(t),(-t,3,3t,2,3t1)y,0,(3t,3,6t,2,3t)y,1,(-3t,3,3t,2,)y,2,t,3,y,3,z(t),(-t,3,3t,2,3t1)z,0,(3t,3,6t,2,3t)z,1,(-3t,3,3t,2,)z,2,t,3,z,3,78,实际生成曲线时,按问题的要求取一合适的步长,控制u从0到1变化,求出一系列(x,y)坐标点,将其用小线段顺序连接起来,就可以得到一条Bezier曲线。,对于二维平面的情况,只有x,y坐标分量,可以给出四点三次Bezier曲线如下的算法描述:,begin,x=x,0,y=y,0,moveto(x,y),for t,0 to 1 step,t,x,B,0,3,(t)x,0,B,1,3,(t)x,1,B,2,3,(t)x,2,B,3,3,(t)x,3,y,B,0,3,(t)y,0,B,1,3,(t)y,1,B,2,3,(t)y,2,B,3,3,(t)y,3,lineto(x,y),endfor,end,79,三次Bezier曲线例子:,设在平面上给定的7个控制点坐标分别为:(100,300),(120,200),(220,200),(270,100),(370,100),(420,200),(420,300)。画出其曲线。,80,6.2.4Bezier 曲线的光滑连接,复杂曲线可以由一些较低次数的Bezier曲线段连接而成,工程上通常使用分段三次Bezier曲线来描述。将分段的三次Bezier曲线连接起来构成三次Bezier曲线,其关键问题是如何保证连接处具有连续性。,设有两段三次Bezier曲线,其中一段曲线由控制点P,0,、P,1,、P,2,、P,3,生成,另一条曲线由控制点Q,0,、Q,1,、Q,2,、Q,3,生成,P,3,(Q,0,)是两段曲线的公共控制点,如下图所示。如果两段曲线要达到光滑连接,需要一阶导数连续,甚至二阶导数连续。对于一阶导数连续,由前面所推出的公式,第一段曲线终点处的导数为:,P,(1)3(P,3,P,2,),第二段曲线起点处的导数为:,Q,(0)3(Q,0,Q,1,),81,两段Bezier曲线光滑连接的条件示意图,一阶导数要连续,则应有P,(1)Q,(0),即:,P,3,P,2,Q,1,Q,0,也即要求P,2,P,3,(Q,0,)Q,1,三点共线,而且P,3,(Q,0,)为中点,,是它们的公切线。,82,第一段曲线终点处的二阶导数为:,P,”,(1)6(P,3,2P,2,P,1,),第二段曲线起点处的二阶导数为:,Q,”,(0)6(Q,2,2Q,1,Q,0,),要达到二阶导数连续,则应有P,”,(1)Q,”,(0),即:,P,3,2P,2,P,1,Q,2,2Q,1,Q,0,Bezier样条曲线为外形设计提供了灵活直观的方法,但对(n+1)个控制点,需要n阶Bernstein多项式,当n较大时,特征多边形对曲线控制减弱,曲线修改和使用都不便。如果使用低次多项式分段实现,光滑连接所需要的条件要求比较高。另外,如果改变任一个控制点位置,整个曲线都受到影响,缺乏对曲线形状进行局部修改的灵活性。,6.2.5,Bezier曲线生成算法,根据式(6-21),可以编写出绘制任意阶次的Bezier曲线的绘图程序。,double powi(double v,int k)/,计算,v,k,double temp=1.0;,if(k=0 /0,0,=1,else,for(int i=1;i=k;i+),temp=temp*v;,return temp;,long fac(int m)/,计算,m!,int i;,long temp=1;,if(m=0)return 1;/0!=1,else,for(i=2;i=m;i+),temp=temp*i;,return temp;,void bezier(int px,int py,int n),int x,y,i,j,k=100;,double t,t1,u,v;,double temp,temp1,temp2,bi;,t=1.0/k;,moveto(px0,py0);/,移动到起始顶点,for(j=1;jk;j+),t1=j*t;,u=t1;v=1,u;,x=0;y=0;,for(i=0;i=n;i+),temp=double(fac(n)/fac(i)/fac(ni);,/n!/(i!*(n-i)!),temp1=powi(u,i);,/u,i,temp2=powi(v,ni);,/v,(n-i),bi=temp*temp1*temp2;,x=x+bi*pxi;,y=y+bi*pyi;,LineTo(x,y);,lineto(pxn,pyn);,习题3,给定四点P1(0,0,0),P2(1,1,1),P3(2,-1,-1),P4(3,0,0),用其作为特征多边形来构造一条三次Bezier曲线,并计算参数为0,1/3,2/3,1的值。,解:三次Bezier曲线的一般式为:,P(t)=(1-t),3,P,1,+3t(1-t),2,P,2,+3t,2,(1-t)P,3,+t,3,P,4,t0 1,其矩阵表达式
展开阅读全文