(计算机图形学)自由曲线曲面_第1页
(计算机图形学)自由曲线曲面_第2页
(计算机图形学)自由曲线曲面_第3页
(计算机图形学)自由曲线曲面_第4页
(计算机图形学)自由曲线曲面_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第七章,自由曲线曲面,7.1 基本概念 7.2 Bezier曲线 7.3 Bezier曲面 7.4 B样条曲线 7.5 B样条曲面 7.6 本章总结,本章内容,曲线曲面概述,图形学中一个很复杂的又非常重要的研究领域。 曲线曲面才是造型的真正统治者,它占据了我们生活和幻想中的造型的绝大部分。 但曲线曲面又是如此地难以理解,让人们在一段很长很长的时间内无法征服它。 自由曲线和曲面 规则的曲线和曲面,比如:圆和球,可以用固定的函数表达式来构造,但是他的造型能力有限,我们这儿不讨论。 自由曲线和曲面是指那些形状比较复杂、不能用初等解析函数直接表示出来的曲线和曲面。 它的应用极为广泛,在动画领域上举足轻

2、重,在造型工业设计上更是独占鳌头。汽车车身、飞机机翼和轮船船体等的曲线和曲面均属于这一类。,7.1 基本概念,7.1.1 曲线与曲面的表示形式,已知直线段的起点坐标P0(x0,y0)和终点坐标P1(x1,y1),直线段的显式方程表示为,隐函数方程表示为,参数方程表示为,,t0,1,工业上常使用 优点:易推导至高维; 改变t值得到一条轨迹,直观; 不同参数方程可得到同一曲线,7.1.2曲线构造方法,插值法 给定一组有序的数据点Pi,i=0, 1, , n,构造一条曲线顺序通过这些数据点,称为对这些数据点进行插值,所构造的曲线称为插值曲线。,逼近法 构造一条曲线使之在某种意义下最接近给定的数据点(

3、但未必通过这些点) ,称为对这些数据点进行逼近,所构造的曲线称为逼近曲线。,插值和逼近统称为拟合。,在前面的插值法中,如果给定的点(叫做型值点)太多,很难构造插值函数,因此可以适当的放弃一些型值点。 型值点:是用于确定曲线和曲面的位置与形状,且相应曲线或曲面一定经过的点。 控制点:是用于确定曲线和曲面的位置与形状,但相应曲线或曲面不一定经过。 插值点:是在型值点或控制点值之间插入的一系列点。,曲线构造方法,判断哪些是插值、哪些是逼近,插值法 线性插值:假设给定函数f(x)在两个不同点x1和x2的值,用线形函数 近似代替f(x),称为的线性插值函数。,插值法 抛物线插值(二次插值): 已知在三个

4、互异点x1,x2,x3的函数值为y1,y2,y3,要求构造函数 (x)=ax2+bx+c,使得(x)在xi处与f(x)在xi处的值相等。,光顺: 曲线拐点不能太多。对平面曲线来讲,相对光顺的条件是: 具有二阶几何连续性 不存在多余的拐点和奇异点 曲率变化较小,连续性条件 在拟合过程中,不同控制点和型值点控制的曲线段不一样,我们可能用多组曲线段去组合一条最终的拟合曲线,多条曲线首尾相连形成一条曲线,为了让连接处具有合乎要求的连续性,因此需要定义连续性条件,Examples: These two curves do not fit together at all. These two curves

5、 fit together, but not smoothly. These two curves fit together smoothly.,连续性条件 参数连续性,用C 阶数表示 C0连续(0阶参数连续) 指曲线相连,前一段曲线的终点t=1与后一段曲线的起点t=0相同,即相邻两段曲线结合点处有相同坐标。 C1连续(一阶参数连续) 代表两个相邻曲线段的方程在相交点处有相同的一阶导数(切线)。(一阶导数反映了曲线对参数t的变化速度) C2连续(二阶参数连续) 两个曲线段在交点处有相同的一阶和二阶导数。 (二阶导数反映了曲线对参数t的变化的加速度),连续性条件 几何连续性,用 G 阶数表示,其

6、只要求参数成比例。 G0连续(0阶几何连续) 与C0连续相同。 G1连续(一阶几何连续) 指一阶导数在两个相邻段的交点处成比例但不一定相等。 G2连续(二阶几何连续) 指两个曲线段在相交处其一阶和二阶导数均成比例。G2连续性下,两个曲线段在交点处的曲率相等。,在实际的曲线造型应用中,我们要适当地选择曲线段间的连续性,使造型物体既能保证其光滑性的要求,也能保证其美观性的要求,一般只使用C1,C2 和G1,G2连续。,7.2 Bezier曲线,Bezier,Bezier曲线由法国雪铁龙(Citroen)汽车公司的de Casteljau于1959年发明,后来又由法国雷诺(Renault)汽车公司的

7、工程师Bezier于1962年独立发明。,De Casteljau,几种典型的Bezier曲线,In 1959, while working at Citroen, Paul De Casteljau developed an algorithm for evaluating calculations on a certain family of curves, which would later be formalized and popularized by engineer Pierre Bezier, and the curves called De Casteljau curve o

8、r Bezier curve.,给定n+1个控制点Pi(i0,1,2n),称为n次Bezier曲线。 t0,1 式中,Pi(i0,1,2n)是控制多边形的n+1个控制点,控制多边形是连接n条边构成的多边形。Bi,n(t) 是Bernstein基函数,其表达式为:,7.2.1 Bezier曲线的定义,在实际应用中,最常用的是三次Bezier曲线,其次是二次Bezier曲线,高次Bezier曲线一般很少使用。,void CTestView:DrawBezier()/绘制Bezier曲线 CDC *pDC=GetDC(); CPen NewPen,*pOldPen; NewPen.CreatePen

9、(PS_SOLID,1,RGB(0,0,255);/曲线颜色 pOldPen=pDC-SelectObject( ,double CTestView:C(const int ,Power幂,Factorial,阶乘,当n1时,Bezier曲线的控制多边形有二个控制点P0和P1,Bezier曲线是一次多项式。 一次Bezier曲线是一段直线。,1.一次Bezier曲线,2.二次Bezier曲线,当n2时,Bezier曲线的控制多边形有三个控制点P0、P1和P2,Bezier曲线是二次多项式。 二次Bezier曲线是一段抛物线。,当n3时,Bezier曲线的控制多边形有四个控制点P0、P1、P2和

10、P3,Bezier曲线是三次多项式。 三次Bezier曲线是段自由曲线。,3.三次Bezier曲线,,,,,,,。,3.三次Bezier曲线,,,,,,,。,写成矩阵形式为,t0,1,三次Bezier曲线的Bernstein基函数:,4个基函数,在区间0,1范围内,每个基函数均不为零,说明不能使用控制多边形对曲线的形状进行局部调整,如果要改变某一控制点位置,整条曲线都将受到影响。,7.2.2 Bernstein基函数及曲线的性质,1.非负性:,t0,1(i0,1,2n),2.权性:,,t0,1,2.端点性质,,,这里用到:001,0!=1,4.对称性(即从左到右,从右到左是对称的),因为:,一

11、阶导数,6.递归性,曲线的构建方法: de Casteljau算法,7.升阶,8.积分(Integral),曲线的几何不变性,即几何属性不随坐标系的变化而变化,只与控制多边形顶点位置相关。,根据以上性质知道,Bezier曲线是拟合曲线,在控制多边形的第一个顶点和最后一个顶点处进行插值,其形状直接受其余控制点的影响。 (1)曲线过控制多边形的起始点和终止点。 (2)曲线起始点处的一阶导数是通过第一个控制点和第二个控制点之间的矢量来定义;曲线终止点处的一阶导数是通过最后一个控制点和倒数第二个控制点之间的矢量来定义。 (3)曲线在起始点的二阶导数依赖于起始的3个控制点;曲线在终止点的二阶导数依赖于最

12、后的3个控制点。,7.2.3 de Casteljau算法,Bezier曲线上的点,可以使用Bezier曲线方程直接计算,但使用de Casteljau递推算法则要简单的多。,给定空间n+1个控制点Pi(i=0,1, 2n)及参数t,de Casteljau递推算法表述为,(7-16),1.递推公式,三次Bezier曲线递推如下,其中:规定:,定义Bezier曲线的控制点编号为,de Casteljau已经证明,当r=n时,,根据式(7-16)可以绘制n次Bezier曲线。,,其中,r为递推次数。,表示曲线上的点。,第一级递推,第二级递推,第三级递推,当n=3时,有,当n=3时,图7-21 d

13、e Casteljau递推三角形,2.几何作图法,de Casteljau算法的基础是在线段P0P1上选择一个点P(t),使得P(t)点划分P0P1为 t:(1-t)两段,如图7-17所示。给定点P0 、P1的坐标以及t的值,点P(t)的坐标为,,t0,1,图7-17 de Casteljau算法基础,依次对原始控制多边形的每一边执行同样的定比分割,所得的分点就是第一级递推生成的中间顶点,(i0,1,,n-1),重复进行下去,直到rn,得到一个中间顶点 (i0,1,,n-2)。,重复进行下去,直到rn,得到一个中间顶点,该点的轨迹即为Bezier曲线上的点P(t)。,以n3的三次Bezier曲

14、线为例,讲解de Casteljau算法的几何作图分法。取t=0,t1/3,t2/3,t=1, 作图绘制 。,图7-18 绘制t=1/3的点,图7-19 绘制t=2/3的点,图7-20 点的运动轨迹,当n3,t=1/2时,de Casteljau递推算法绘制Bezier曲线的过程如上图所示。,void CTestView:DrawBezier() CDC* pDC=GetDC(); pDC-MoveTo(P0); for(int k=0;kLineTo(Round(pp0n.x),Round(pp0n.y); ReleaseDC(pDC); ,1.绘制Bezier曲线函数,void CTest

15、View:deCasteljau(double t,CP2 *p) for(int k=0;k=n;k+) ppk0=pk; for(int r=1;r=n;r+)/de Casteljau递推公式 for(int i=0;i=n-r;i+) ppir.x=(1-t)*ppir-1.x+t*ppi+1r-1.x; ppir.y=(1-t)*ppir-1.y+t*ppi+1r-1.y; ,2.de Casteljau函数,de Casteljau递推算法,7.2.5 Bezier曲线的拼接,一条Bezier曲线往往难以描述复杂的曲面形状。这是由于增加控制多边形的顶点数,会引起Bezier曲线次数

16、的提高,而高次Bezier曲线会带来计算上的困难。工程中经常使用的是二次或三次Bezier曲线的拼接,要求在结合处满足一定的连续性条件。,假设两段三次Bezier曲线分别为 和,两段三次Bezier曲线达到G0连续性的条件是:P3Q0。达到G1连续性的条件是:P2、P3(Q0)和Q1三点共线,且P2和Q1位于P3(Q0)的两侧。,,,三次Bezier曲线拼接 (选择对拼接位置的影响),7.3.1 Bezier曲面的定义,Bezier曲面是由Bezier曲线拓广而来,以两组正交的Bezier曲线控制点构造空间网格来生成曲面。mn次张量积形式的 Bezier曲面的定义如下: (u,v)0,10,1

17、,依次用线段连接点列Pi,j(i0,1,m;j0,1,n)中相邻两点所形成的空间网格称为控制网格,当m3,n3时由4416个控制点构成控制网格,如图7-11所示,其相应的曲面称为双三次Bezier曲面。,(7-20),7.3 Bezier曲面,图7-25 双三次Bezier曲面及其控制网格,7.3.2 双三次Bezier曲面的定义,双三次Bezier曲面定义如下: (u,v)0,10,1,(7-21),展开式(7-21),有,,,(7-23),将式(7-23)代入式(7-22)得到,(7-24),令,则有,,(7-25),生成曲面时可以通过先固定u, 变化v得到一簇Bezier曲线; 然后固定

18、v,变化u得到另一簇Bezier曲线,两簇曲线交织生成Bezier曲面。,几种不同形状的双三次Bezier曲面如图7-26所示。,图7-26 不同形状的Bezier曲面,曲面1,曲面2,7.3.3 双三次Bezier曲面的拼接,与Bezier拼接类似,两张双三次Bezier曲面片也可以拼接在一起。其Beizer曲面片表述如下,图7-27 Bezier曲面的拼接,一般情况下,在连接处保持一阶导数连续较为困难,要求两个控制多边形中位于交点处的两条边必须共线,但设计中很难做到这一点。图7-28所示为满足G1连续性的条件的两片Bezier曲面的控制多边形。,图7-28 在连接处保持切线方向连续,双三次

19、Bezier曲面茶壶光照模型,7.4 B样条曲线,Bezier曲线虽然有许多优点,但也存在不足之处: 确定了控制多边形的顶点个数为n+1个,也就确定了曲线的次数为n次; 控制多边形与曲线的逼近程度较差,次数越高,逼进程度越差; 曲线不能局部修改,调整某一控制点将影响到整条曲线,原因是Bernstein基函数在整个区间0,1内有支撑,所以曲线在区间内任何一点的值都将受到全部顶点的影响,调整任何控制点的位置,将会引起整条曲线的改变; Bezier曲线的拼接比较复杂。,为了解决上述问题,Gordon和Riesenfeld于1972年用B样条基函数代替了Bernstein基函数,构造了B样条曲线。B样

20、条曲线比Bezier曲线更贴近控制多边形,曲线更光滑(很容易达到C2连续性),其多项式的次数可根据需要指定,而不像Bezier曲线多项式的次数是由控制点的个数来确定。除此之外B样条曲线的突出优点是增加了对曲线的局部修改功能,因为B样条曲线是分段组成的,所以控制多边形的顶点对曲线的控制灵活而直观。修改某一控制点只引起与该控制点相邻近的曲线形状发生变化,远处的曲线形状不受影响,这种优点使得B样条曲线广泛应用于交互式自由曲线曲面设计。,7.4.1 B样条曲线的定义,给定m+n+1个控制点Pi(i0,1,2,m+n ),可以定义m+1段n次的参数曲线 为n次B样条基函数,其形式为,(0t1,k=0,1

21、,2,,n),其中,,7.4.2 二次B样条曲线,二次B样条曲线的n2,k0,1,2。二次B样条曲线是二次多项式 。,1.矩阵表示,因此,二次B样条曲线的分段参数表达式为,(i0,1,2,m),综合起来,二次B样条曲线还可以写成更一般化的形式:,对于i0段曲线,写成矩阵形式为,t0,1,式中,Pk为分段曲线的控制多边形的三个顶点:P0、P1和P2 。,则第j段曲线的为:Pj,Pj+1,Pj+2连续的三个顶点。,2.几何性质,由式(7-29)可以得出一阶导数,t0,1,(7-30),将t0、t1和t1/2分别代入式(7-28)和(7-29),图7-30 第i段二次B样条曲线段及其控制多边形,由以

22、上的三对式子说明:二次B样条曲线段的起点P(0)在特征多边形第一条边的中点处,且其切向量P1P0即为第一条边的走向;终点P(1)在特征多边形线第二条边的中点处,且其切向量P2P1即为第二条边的走向。而且,P(1/2)正是P(0)P1P(1)的中线P1PM的中点,且在P(1/2)处的切线平行于P(0)P(1)。因此, 分段二次B样条曲线是一条 抛物线。见图所示。,与Bezier曲线有什么区别?,结论:分段二次B样条曲线是一条抛物线;有n个顶点定义的二次B样条曲线,实质是由n-2段抛物线(相邻三点定义一段)的连接,并在接点处达到一阶连续。,7.4.3 三次B样条曲线,1.矩阵表示,三次B样条曲线的

23、n3,k0,1,2,3。三次B样条曲线是三次多项式。,因此,三次B样条曲线的分段参数表达式为,(i0,1,2,m),对于i0段曲线,写成矩阵形式为,(7-31),t0,1,Pk为分段曲线的控制多边形的四个顶点:P0、P1、P2 和P3。,2.几何性质,由(7-31)可以得出一阶导数和二阶导数,(7-32),t0,1,t0,1,(7-33),令,以t0和t1代入式(7-31)、(7-32)和(7-33),可得,从以上列出的端点结果我们可以看到,曲线段的起点P(0)位于P0P1P2底边P0P2的中线P1Pm上,且距P1点的三分之一处。该点处的切矢P(0)平行于P0P1P2的底边P0P2,且长度为其

24、二分之一。该点的二阶导数P(0)等于中线矢量P1Pm的二倍,见图。,这样,4个顶点P0P1P2P3确定一段三次B样条曲线。连接处达到二阶连续性。,7.4.4 B样条曲线的性质,1.连续性,控制点PiPi+1Pi+2确定第i段二次B样条曲线,Pi+1Pi+2Pi+3确定第i1段二次B样条曲线,第i1段曲线的起点切矢量Pi+2Pi+1沿Pi+1Pi+2边的走向,和第i段二次B样条曲线的终点切矢量相等,两段B样条曲线实现自然连接,但二次B样条曲线只能达到C1连续性。,图7-32二次B样条曲线的连续性,图7-33 三次B样条曲线的连续性,控制点PiPi+1Pi+2Pi+3确定第i段三次B样条曲线,如果

25、再添加一个顶点Pi+4,则Pi+1Pi+2Pi+3Pi+4可以确定第i+1段三次B样条曲线,而且第i+1段三次B样条曲线的起点切矢量、二阶导数和第i段三次B样条曲线的终点切矢量和二阶导数相等,两段B样条曲线实现自然连接,三次B样条曲线可以达到C2连续性。一般而言,n次B样条曲线具有n-1阶导数的连续性。,2.局部性质,图7-37三次B样条曲线局部顶点修改,在B样条曲线中,n次每段B样条曲线受n+1个控制点影响,改变一个控制点的位置,最多影响n+1个曲线段,其它部分曲线形状保持不变。,7.4.5 构造特殊的三次B样条曲线的技巧,1.二重顶点(曲线与控制多边形的边相切),2.三重顶点(曲线中出现尖

26、点),3.三顶点共线(处理两弧的连接),4.四顶点共线(两段曲线中植入一条直线),三次B样条曲线绘制树叶,5. 三次B样条曲线的算法源程序,void BSpLine(CPoint *pp, int n) /这里数组pp的下标从1开始 int x,y,i,j,k=1000; double t,t1,t2,t3,a,b,c,d; t=1.0/k; pp0.x=2*pp1.x-pp2.x; /端点处理 pp0.y=2*pp1.y-pp2.y; ppn.x=2*ppn-1.x-ppn-2.x; ppn.y=2*ppn-1.y-ppn-2.y; MoveTo(pp1);,for(i=1;in-1;i+)

27、 for(j=1;j=k;j+) t1=j*t; t2=t1*t1;t3=t2*t1; a=(3*t2-t3-3*t1+1)/6; b=(3*t3-6*t2+4)/6; c=(3*t2-3*t3+3*t1+1)/6; d=t3/6; x=int(a*ppi-1.x+b*ppi.x+c*ppi+1.x+d*ppi+2.x); y=int(a*ppi-1.y+b*ppi.y+c*ppi+1.y+d*ppi+2.y); LineTo(x,y); ,7.5 B样条曲面,B样条曲面是B样条曲线的二维推广,给定(m1)(n+1)个控制点Pi,j(i=0,1,m;j=0,1,n),张量积形式的B样条曲面的表达式为,(u,v)0,10,1,(7-34),式中,Pi,j(i0,1,m;j0,1,n)是(m+1)(n+1)个控制点。,是B样条基函数。,7.5.1 B样条曲面的定义,7.5.2 双三次B样条曲面的定义,(u,v)0,10,1,(7-35),展开式有,(7-36),,,将式(7-37)代入式(7-36)得到,令,则有,双三次B样条曲面是由三次B样条曲线交织而成。曲面生成时可以先固定u, 变化v得到

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论