1车身CAD吴娜山东交通学院汽车工程系2主要讲授内容CAGD发展;几何造型技术;参数曲线和曲面;BezierBezier曲线与曲面;曲线与曲面;B样条曲线与曲面;NURBS曲线与曲面;第3章车身曲线曲面的数学模型基础33.BezierBezier曲线曲线------复习复习0P1P2P3P图3.1.8三次Bezier曲线0P1P2P3P41.定义给定空间n+1个点的位置矢量Pi(i=0,1,2,…,n),则Bezier曲线可定义为:]1,0[),()(,0∈=Σ=ttBPtPniini[])(),(),()(tztytxtP=注意:(,,)iiiiPxyz3.BezierBezier曲线曲线------复习复习5其中,Pi构成该Bezier曲线的特征多边形,Bi,n(t)是n次Bernstein基函数:0°=1,0!=1),,1,0()1()!(!!)1()(,nittininttCtBiniiniinni⋅⋅⋅=−⋅−=−=−−3.BezierBezier曲线曲线------复习复习63.3.三次三次BernsteinBernstein基函数及曲线基函数及曲线------复习复习三次Bernstein基函数(1)f(t)t(1)B1,3B1,3B0,3B2,3B3,3当n=3时,B0,3(t)=(1-t)3,B1,3(t)=3t(1-t)2,B2,3(t)=3t2(1-t),B3,3(t)=t3。注意:三次Bernstein基函数性质影响曲线性质。73.Bezier3.Bezier曲线曲线------性质性质3.Bezier曲线的性质(1)端点性质a)曲线端点位置矢量由Bernstein基函数的端点性质可以推得,当t=0时,P(0)=P0;当t=1时,P(1)=Pn。由此可见,Bezier曲线的起点、终点与相应的特征多边形的起点、终点重合。83.Bezier3.Bezier曲线曲线------性质性质(2)对称性由控制顶点构造出的新Bezier曲线,与原Bezier曲线形状相同,走向相反。因为:这个性质说明Bezier曲线在起点处有什么几何性质,在终点处也有相同的性质。),,...,1,0(,*niPPini==−∑∑==−==nininiinniitBPtBPtC00,,*)()()(*∑∑==−−∈−=−=niniininininttBPtBP0,0,]1,0[),1()1(9(3)凸包性由于,且,这一结果说明当t在[0,1]区间变化时,对某一个t值,P(t)是特征多边形各顶点的加权平均,权因子依次是。在几何图形上,意味着Bezier曲线P(t)在中各点是控制点Pi的凸线性组合,即曲线落在Pi构成的凸包之中,如图所示。∑=≡ninitB0,1)(),,1,0,10(1)(0,nittBniL=≤≤≤≤)(,tBni]1,0[∈t贝齐尔曲线恒位于它的控制顶点的凸包内。贝齐尔曲线恒位于它的控制顶点的凸包内。3.Bezier3.Bezier曲线曲线------性质性质图3.1.9Bezier曲线的凸包性凸包11(4)几何不变性这是指某些几何特性不随坐标变换而变化的特性。Bezier曲线位置与形状与其特征多边形顶点的位置有关,它不依赖坐标系的选择。),,1,0(niPiL=3.Bezier3.Bezier曲线曲线------性质性质12(5)变差缩减性。若Bezier曲线的特征多边形是一个平面图形,则平面内任意直线与C(t)的交点个数不多于该直线与其特征多边形的交点个数,这一性质叫变差缩减性质。此性质反映了Bezier曲线比其特征多边形的波动还小,也就是说Bezier曲线比特征多边形的折线更光顺。nPPPL103.Bezier3.Bezier曲线曲线------性质性质133.Bezier3.Bezier曲线曲线------性质性质(6)交互能力改变曲线的形式,只需改变控制点Pi。(7)可分割性)3/1(30PP=0P1P2P3P10P11P12P20P21P3.Bezier3.Bezier曲线曲线------递推递推(de(deCasteljauCasteljau))算法算法解析几何中抛物线的三切线定理设A,B,C是抛物线上顺序的三点,A点和C点的两切线交与D点,在B点的切线分别交AD和CD与E和F,则:BFEBFCDFEDAE==将A点和C点固定,B点作为动点,引入参数t,另比值为t:(1-t)计算Bezier曲线上的点,可用Bezier曲线方程,但使用deCasteljau提出的递推算法则要简单的多。3.Bezier3.Bezier曲线曲线------递推递推(de(deCasteljauCasteljau))算法算法0P1P2P11P10P20PBezier曲线上的点16设、、是一条抛物线上顺序三个不同的点。过和点的两切线交于点,在点的切线交和于和,则如下比例成立:0P20P2P0P2P1P20P10PP21PP10P11P11202010211111110100PPPPPPPPPPPP==3.Bezier3.Bezier曲线曲线------递推递推(de(deCasteljauCasteljau))算法算法0P1P2P11P10P20PBezier曲线上的点3.Bezier3.Bezier曲线曲线------递推递推(de(deCasteljauCasteljau))算法算法当P0,P2固定,引入参数t,令上述比值为t:(1-t),即有:11102021111010)1()1()1(tPPtPtPPtPtPPtP+−=+−=+−=2210220)1(2)1(PtPttPtP+−+−=t从0变到1,第一、二式就分别表示控制二边形的第一、二条边,它们是两条一次Bezier曲线。将一、二式代入第三式得:17当t从0变到1时,它表示了由三顶点P0、P1、P2三点定义的一条二次Bezier曲线。并且表明:这二次Bezier曲线P20可以定义为分别由前两个顶点(P0,P1)和后两个顶点(P1,P2)决定的一次Bezier曲线的线性组合。依次类推,由四个控制点定义的三次Bezier曲线P30可被定义为分别由(P0,P1,P2)和(P1,P2,P3)确定的二条二次Bezier曲线的线性组合,3.Bezier3.Bezier曲线曲线------递推递推(de(deCasteljauCasteljau))算法算法19由(n+1)个控制点Pi(i=0,1,...,n)定义的n次Bezier曲线Pn0可被定义为分别由前、后n个控制点定义的两条(n-1)次Bezier曲线P0n-1与P1n-1的线性组合:由此得到Bezier曲线的递推计算公式:这便是著名的deCasteljau算法。用这一递推公式,在给定参数下,求Bezier曲线上一点P(t)非常有效。⎩⎨⎧−==+−==−+−kninktPPtkPPkikiiki,...,1,0,,...,2,1)1(0111]1,0[)1(11100∈+−=−−ttPPtPnnn3.Bezier3.Bezier曲线曲线------递推递推(de(deCasteljauCasteljau))算法算法20上式中:是定义Bezier曲线的控制点,即为曲线上具有参数t的点。deCasteljau算法稳定可靠,直观简便,可以编出十分简捷的程序,是计算Bezier曲线的基本算法和标准算法。当n=3时,decasteljau算法递推出的Pki呈直角三角形,对应结果如图3.1.11所示。从左向右递推,最右边点P30即为曲线上的点。nP0)(tP3.Bezier3.Bezier曲线曲线------递推递推(de(deCasteljauCasteljau))算法算法213.Bezier3.Bezier曲线曲线------递推递推(de(deCasteljauCasteljau))算法算法0P1P2P3P10P11P12P20P21P30P图3.1.11n=3时niP的递推关系22voidCMyView::bezier_DeC(DCPointa,DCPointb,DCPointc,DCPointd){DCPointt1,t2,t3,t4,t5;t1.x=(a.x+b.x)/2;t1.y=(a.y+b.y)/2;t2.x=(c.x+b.x)/2;t2.y=(c.y+b.y)/2;t3.x=(c.x+d.x)/2;t3.y=(c.y+d.y)/2;t4.x=(a.x+b.x+c.x+b.x)/4;t4.y=(a.y+b.y+c.y+b.y)/4;t5.x=(c.x+d.x+c.x+b.x)/4;t5.y=(c.y+d.y+c.y+b.y)/4;t2.x=(a.x+b.x+c.x+b.x+c.x+d.x+c.x+b.x)/8;t2.y=(a.y+b.y+c.y+b.y+c.y+d.y+c.y+b.y)/8;if((pow((a.x-t2.x),2)+pow((a.y-t2.y),2))25){bezier_DeC(a,t1,t4,t2);}3.Bezier3.Bezier曲线曲线------德卡斯特里奥递推算法德卡斯特里奥递推算法23else{::Sleep(5);ddaline(a.x,a.y,t1.x,t1.y,COLOR);ddaline(t1.x,t1.y,t4.x,t4.y,COLOR);ddaline(t4.x,t4.y,t2.x,t2.y,COLOR);}if((pow((d.x-t2.x),2)+pow((d.y-t2.y),2))25){bezier_DeC(t2,t5,t3,d);}else{::Sleep(5);ddaline(t2.x,t2.y,t5.x,t5.y,COLOR);ddaline(t5.x,t5.y,t3.x,t3.y,COLOR);ddaline(d.x,d.y,t3.x,t3.y,COLOR);}}3.Bezier3.Bezier曲线曲线------递推递推(de(deCasteljauCasteljau))算法算法24这一算法可用简单的几何作图来实现。给定参数,就把定义域分成长度为的两段。依次对原始控制多边形每一边执行同样的定比分割,所得分点就是由第一级递推生成的中间顶点,对这些中间顶点构成的控制多边形再执行同样的定比分割,得第二级中间顶点。重复进行下去,直到n级递推得到一个中间顶点即为所求曲线上的点,如图所示。]1,0[∈t)1(:tt−)1,,1,0(1−=niPiL)2,,1,0(2−=niPiLnP0)(tP3.Bezier3.Bezier曲线曲线------递推递推(de(deCasteljauCasteljau))算法算法253.Bezier3.Bezier曲线曲线------递推递推(de(deCasteljauCasteljau))算法算法26根据根据递推递推(de(deCasteljauCasteljau))算法算法绘制一段绘制一段BezierBezier曲线曲线0P1P2P3P10P11P12P20P21P30P3.Bezier3.Bezier曲线曲线------递推递推(de(deCasteljauCasteljau))算法算法图3.1.11n=3时niP的递推关系3.Bezier3.Bezier曲线曲线------递推递推(de(deCasteljauCasteljau))算法算法28练练习习写出三次Bezier曲线的递推计算公式:给出P0(1,1),P1(4,4),P2(8,4),P3(10,2),用递推算法和Bezier曲线定义公式,分别计算t=0.2,t=0.8Bezier曲线的点。)t(30PP=01t0P1P2P3P10P11P12P20P21P293.Bezier3.Bezier曲线曲线------拼接拼接(P45)(P45)几何设计中,一条Bezier曲线往往难以描述复杂的曲线形状。这是由于增加特征多边形的顶点数,会引起Bezier曲线次数的提高,而高次多项式又会带来计算上的困难,实际使用中,一般不超过10次。所以有