第七章Bezier曲线Bezier曲面B样条曲线B样条曲面本章学习目标27.1基本概念7.4Bezier曲线7.5Bezier曲面7.6B样条曲线7.7B样条曲面7.8本章总结7.9习题本章内容3工业产品的几何形状大致可分为两类:一类由初等解析曲面,如平面、圆柱面、圆锥面、球面和圆环面等组成,可以用初等解析函数完全清楚地表达全部形状。另一类由自由曲面组成,如汽车车身、飞机机翼和轮船船体等曲面,不能用初等解析函数完全清楚地表达全部形状,需要构造新的函数来进行研究,这些研究成果形成了计算机辅助几何设计(ComputerAidedGeometricDesign,CAGD)学科。汽车曲面4下一张7.1基本概念7.1.1曲线与曲面的表示形式已知直线段的起点坐标P0(x0,y0)和终点坐标P1(x1,y1),直线段的显式方程表示为)(001010xxxxyyyy隐函数方程表示为0)(),(001010xxxxyyyyyxf参数方程表示为tyyyytxxxx)()(010010,t∈〔0,1〕57.1.2插值与逼近插值(Interpolation):当用一组数据点来指定曲线的形状时,曲线精确地通过给定的数据点且形成光滑的曲线,称为曲线的插值。逼近(Approximation):当用一组控制点来指定曲线的形状时,曲线被每个控制点所吸引,但实际上并不经过这些控制点,称为曲线的逼近。插值与逼近统称为拟合(Fitting)。逼近曲线插值曲线下一张通常单一的曲线段或曲面片难以表达复杂的形状,必须将一些曲线段连接成组合曲线,或将一些曲面片连接成组合曲面,才能描述复杂的形状。为了保证在连接点处光滑过渡,需要满足连续性条件。7.1.3连续性条件参数连续性:C0,指相邻两段曲线在结合点处具有相同的坐标。C1,指相邻两段曲线在结合点处具有相同的一阶导数。C2,指相邻两段曲线在结合点处具有相同的一阶导数和二阶导数。7几何连续性:G0,指相邻两段曲线在结合点处具有相同的坐标。G1,指相邻两段曲线在结合点处的一阶导数成比例。G2,指相邻两段曲线在结合点处的一阶导数和二阶导数成比例。零阶连续性一阶连续性二阶连续性下一张7.2Bezier曲线法国雷诺汽车公司的工程师Bezier和法国雪铁龙汽车公司的deCasteljiau分别提出了一种新的参数曲线表示方法,称为Bezier曲线。几种典型的三次Bezier曲线Bezier9下一张给定n+1个控制点Pi(i=0,1,2……n),称为n次Bezier曲线。t∈〔0,1〕式中,Pi(i=0,1,2……n)是控制多边形的n+1个控制点,控制多边形是连接n条边构成的多边形。Bi,n(t)是Bernstein基函数,其表达式为:7.2.1Bezier曲线的定义)()(,0tBPtpniniiininittinintB)1()!(!!)(,在实际应用中,最常用的是三次Bezier曲线,其次是二次Bezier曲线,高次Bezier曲线一般很少使用。10下一张当n=1时,Bezier曲线的控制多边形有二个控制点P0和P1,Bezier曲线是一次多项式。一次Bezier曲线是一段直线。101,10Pt)(1)()(PttBPtpiii1.一次Bezier曲线2.二次Bezier曲线当n=2时,Bezier曲线的控制多边形有三个控制点P0、P1和P2,Bezier曲线是二次多项式。二次Bezier曲线是一段抛物线。Pt)1(2Pt)(1)()(221022,20PtttBPtpiii11下一张当n=3时,Bezier曲线的控制多边形有四个控制点P0、P1、P2和P3,Bezier曲线是三次多项式。三次Bezier曲线是自由曲线。PtPt)-(1t3)1(3Pt)(1)()(332212033,30PtttBPtpiiiPtP)3tt3()363(1)P3t-3tt(33223123023Pttt3.三次Bezier曲线,,,。写成矩阵形式为21020010221211)(PPPtttp,t∈〔0,1〕12三次Bezier曲线的Bernstein基函数:3233,0)1(133)(tttttB2233,1)1(3363)(ttttttB)1(333)(2233,2tttttB33,3)(ttB4个基函数B0,3(t)B3,3(t)B1,3(t)B2,3(t)Ot在区间〔0,1〕范围内,每个基函数均不为零,说明不能使用控制多边形对曲线的形状进行局部调整,如果要改变某一控制点位置,整条曲线都将受到影响。下一张7.2.2Bernstein基函数的性质1.正性t∈〔0,1〕(i=0,1,2……n)iniinininittCttinintB)1()1()!(!!)(,2.端点性质0,00,1)0(,iiBnininiBni,0,1)1(,,这里用到:00=1,0!=10)(,tBni143.权性1)1()1()(00,nniiniinninittttCtB,t∈〔0,1〕4.对称性)(,))1(1()1()1(innininnninttCtBinninCC因为:)()1()1(,,tBttCtBniiniinnin5.导函数)()()(1,1,1',tBtBntBninini,(i=0,1,2……n)下一张7.2.3Bezier曲线的性质1.端点性质Bernstein基函数的性质决定了Bezier曲线的性质当t=0时,p(0)=P0;当t=1时,p(1)=Pn。2.一阶导数))()(()(1,1,110'tBtBPntpnininii)()()()((1,111,011,001,10tBPtBPtBPtBPnnnnn))()()()(1,1,11,111,21tBPtBPtBPtBPnnnnnnnnnnnn)()(11,11niniiitBPPn16下一张)()0(01'PPnp)()1(1'nnPPnp,在起始点t﹦0,B0,n-1(0)﹦1,其余项均为0,故有:在终止点t﹦1,Bn-1,n-1(1)﹦1,其余项均为0,故有:3.二阶导数2121202(t))BPP(P)n(n(t)pi,niinii''当t=0时,))()((1)2(100112012PPPP)n(nPPP)n(n)(p''当t=1时,))()((1)2(1121121nnnnnnn''PPPP)n(nPPP)n(n)(p起始点和终止点的二阶导数分别取决于最开始的3个控制点和最后的3个控制点。17下一张4.对称性iniPP*由控制点,(i=0,1,2……n),构造出的新Bezier曲线与原Bezier曲线形状相同,但走向相反。ninininniniinniniitBPtBPtBPtp0,0,,0**)1()()()()1()1(,0tptBPninii这个性质说明Bezier曲线在控制多边形的起点和终点具有相同的性质18下一张5.凸包性0)(,tBni1)(0,ninitB由Bernstein基函数的正性和权性可知,在闭区间〔0,1〕内,,而且这说明Bezier曲线位于控制多边形构成的凸包之内,而且永远不会超出凸包的范围。P0P0P1P2凸包19下一张根据以上性质知道,Bezier曲线是拟合曲线,在控制多边形的第一个顶点和最后一个顶点处进行插值,其形状直接受其余控制点的影响。(1)曲线过控制多边形的起始点和终止点。(2)曲线起始点处的一阶导数是通过第一个控制点和第二个控制点之间的矢量来定义;曲线终止点处的一阶导数是通过最后一个控制点和倒数第二个控制点之间的矢量来定义。(3)曲线在起始点的二阶导数依赖于起始的3个控制点;曲线在终止点的二阶导数依赖于最后的3个控制点。20下一张7.2.4deCasteljau算法Bezier曲线上的点,可以使用Bezier曲线方程直接计算,但使用deCasteljau递推算法则要简单的多。给定空间n+1个控制点Pi(i=0,1,2n)及参数t,deCasteljau递推算法表述为)()()1()(111tPttPttPririri]1,0[;,1,0;,2,1trninr(7-16)当n=3时,有1.递推公式0,31,0,22,1,0,1iririr21三次Bezier曲线递推如下)()()1()()()()1()()()()1()(030212020111010010tPttPttPtPttPttPtPttPttP)()()1()()()()1()(121121111020tPttPttPtPttPttP)()()1()(212030tPttPttP其中:规定:iiPtP)(0riPnP0定义Bezier曲线的控制点编号为deCasteljau已经证明,当r=n时,根据式(7-16)可以绘制n次Bezier曲线。,其中,r为递推次数。表示曲线上的点。第一级递推第二级递推第三级递推2.几何作图法deCasteljau算法的基础是在线段P0P1上选择一个点P(t),使得P(t)点划分P0P1为t:(1-t)两段,如图7-17所示。给定点P0、P1的坐标以及t的值,点P(t)的坐标为10010)1()()(tPPtPPtPtP,t∈[0,1](7-17)t1-tP0P1P(t)图7-17deCasteljau算法基础依次对原始控制多边形的每一边执行同样的定比分割,所得的分点就是第一级递推生成的中间顶点1iP(i=0,1,…,n-1),重复进行下去,直到r=n,得到一个中间顶点(i=0,1,…,n-2)。2iP重复进行下去,直到r=n,得到一个中间顶点nP0该点的轨迹即为Bezier曲线上的点P(t)。以n=3的三次Bezier曲线为例,讲解deCasteljau算法的几何作图分法。取t=0,t=1/3,t=2/3,t=1,作图绘制。02P11P01P10P00P20P30P03P21P12P图7-18绘制t=1/3的点nP002P11P01P10P00P20P30P03P12P21P图7-19绘制t=2/3的点02P01P00P03P图7-20点的运动轨迹nP0下一张deCasteljau算法递推出的riP呈直角三角形。当n=3时,如图7-21所示。00P01P10P02P03P11P12P20P21P30P0P1P2P3P图7-21deCasteljau递推三角形26voidCTestView::DrawBezier(){CDC*pDC=GetDC();pDC-MoveTo(P[0]);for(intk=0;k=n;k++){pt[k].x=P[k].x;pt[k].y=P[k].y;}for(doublet=0.0;t=1.0;t+=0.01){deCasteljau(t,pt);pDC-LineTo(Round(pp[0][n].x),Round(pp[0][n].y));}ReleaseDC(pDC);}1.绘制Bezier曲线函数voidCTestView::deCasteljau(doublet,CP2*p){for(intk=0;k=n;k++){pp[k][0]=p[k];}for(intr=1;r=n;r++)//deCasteljau递推公式{for(inti=0;i=n-r;i++){pp[i][r]