图形学教案第四章曲线和曲面.ppt
第四章 曲线和曲面,第一节 曲线和曲面表示的基础知识第二节 Hermite多项式 第三节 Coons曲面 第四节 Bezier曲线和曲面 第五节 B样条曲线和曲面,第一节 曲线和曲面表示的基础知识,曲线和曲面参数表示(1)与坐标轴相关的,不便于进行坐标变换;(2)会出现斜率为无穷大的情况;(3)难以灵活地构造复杂的曲线、曲面(4)非参数的显示方程只能描述平面曲线,空间曲线必须定义为两张柱面的交线。(5)假如我们使用非参数化函数,在某个xoy坐标系里一条曲线,一些x值对应多个y值,而一些y值对应多个x值。,在空间曲线的参数表示中,曲线上每一点的坐标均要表示成某个参数t的一个函数式,则曲线上每一点笛卡尔坐标参数式是:,,,把三个方程合写到一起,曲线上一点坐标的矢量表示是:,关于参数t的切矢量或导函数是:,曲面写为参数方程形式为:,曲线或曲面的某一部分,可以简单地用atb界定它的范围,直线段 端点坐标分别是 P1x1,y1,P2x2,y2,直线段的参数表达式是:P(t)=P1+(P2-P1)t=(1-t)P1+tP2 0t1;参数表示相应的x,y坐标分量是:x(t)=x1+(x2-x1)t y(t)=y1+(y2-y1)t 0t1,参数方程具有如下优点。(1)对参数表示的曲线、曲面可对其参数方程直接进行几何变换(如平移、比例、旋转)。(2)便于处理斜率为无限大的问题。(3)有更大的自由度来控制曲线、曲面的形状。具有很强的描述能力和丰富的表达能力。(4)参数方程中,代数、几何相关和无关的变量是完全分离的,而且对变量个数不限,从而便于用户把低维空间中的曲线、曲面扩展到高维空间去。,(5)规格化的参数变量t0,1,使其相应的几何分量是有界的,而不必用另外的参数去定义其边界。便于曲线和曲面的分段、分片描述。易于实现光顺连接。(6)易于用矢量和矩阵表示几何分量,计算处理简便易行。,曲线和曲面可以分为两类。一类要求通过事先给定的离散的点,称为是插值的曲线或曲面。另一类不要求通过事先给定的各离散点,而只是用给定各离散点形成的控制多边形来控制形状,称为是逼近的曲线或曲面。,基本概念,插值 要求构造一条曲线顺序通过型值点,称为对这些型值点进行插值(interpolation)。逼近 构造一条曲线,使它在某种意义上最佳逼近这些型值点,称之为对这些型值点进行逼近(approximation)。,参数连续性 一函数在某一点x0处具有相等的直到k阶的左右导数,称它在x0处是k次连续可微的,或称它在x0处是k阶连续的,记作Ck。几何上C0、C1、C2依次表示该函数的图形、切线方向、曲率是连续的。几何连续性 两曲线段的相应的弧长参数化在公共连接点处具有Ck连续性,则称它们在该点处具有k阶几何连续性,记作Gk。零阶几何连续G0与零阶参数连续C0是一致的。一阶几何连续G1指一阶导数在两个相邻曲线段的交点处成比例,即方向相同,大小不同。二阶几何连续G2指两个曲线段在交点处其一阶和二阶导数均成比例。,光顺 光顺(smoothness)是指曲线的拐点不能太多,要光滑顺畅。对于平面曲线相对光顺的条件应该是:(1)具有二阶几何连续(G2);(2)不存在多余拐点和奇异点;(3)曲率变化较小。,拉格朗日n阶多项式:令P0(x0,y0),Pn(xn,yn)表示n+1个数据点,t0,t1,t2为任意数字,其拉格朗日n阶多项式如下:对任意j i,有Li(xi)=1且Lj(xj)=0,拉格朗日插值:令P0(x0,y0),Pn(xn,yn)表示n+1个数据点,希望找出通过这些点的曲线。这里:Li(xi)是拉格朗日多项式,L(x)是插值各数据点的第n阶拉格朗日多项式,第二节 Hermite多项式,已知函数f(t)在k+1个点ti处的函数值和导数值f(j)(ti),i=0,1,k,j=0,1,mi-1,要求确定一个N=m0+m1+mk-1次的多项式P(t),满足下面的插值条件:,考查k=1,m0=m1=2的情形。已知表示一条曲线的某个函数f(t)在两点t0,t1的函数值f(t0),f(t1)和一阶导数值f(t0),f(t1),求三次多项式P(t):,把a0,a1,a2和a3代入则有:,经整理,所求多项式P 0(t)可以写出如下:,式中选取两个端点及其及其切向量作为曲线构造条件 混合函数如下:,设表示一条曲线的某个函数f(t)在四点t0,t1,t2,t3的函数值f(t0),f(t1),f(t2),f(t3),根据Lagrange插值法,则三次多项式P(t)可表示为:,选择四个不同的点作为构造曲线的条件,混合函数如下:,经验证可知:,为了使P0(t)的定义区间t0tt1变为区间0u1,可以做如下变换,解出,代入混合函数式中,得:,将关于u的混合函数代入,所求的三次多项式成为:,令,得,对一般的Hermite插值问题,一般来说得到的插值多项式次数较高,应用起来不方便。通常的处理办法是将前面给出的参数的三次多项式逐段光滑地连接,如此来确定一般情况下的插值多项式。将前面t0和t1视为ti和ti+1,设给定f(ti),f(ti+1),f(ti),f(ti+1),则在区间ti,ti+1的Hermite三次插值多项式Pi(t)是:,为了完整地写出这个插值多项式,可以在区间ti,ti+1中引入如下一些基本函数:,完整的插值多项式可写为:,上式区间t0,tn中有定义,且为分段定义。在每个区间 ti,ti+1上,都恰有四项。满足插值条件,每段曲线Pi(t)只在ti,ti+1中有定义:,自变量的线性变换,用逆变换 代入,将所得关于u的多项式记为,得,其中=,设在平面上有两点P0,Pl,它们的位置向量分别为(1,1),(4,2),在P0的导数值即在该点的切线向量P0=(1,1),在Pl处P1=(1,-1),第三节 Coons曲面,uw表示了曲面片的方程0w,1w,u0,u1表示四条边界曲线u0u表示在边界线u0上的点沿u向的一阶偏导数向量,称边界线的切向量u0w表示边界线u0上的点沿w向的一阶偏导数向量,称边界线的跨界切向量。uwuu,uwuw,uwww分别表示曲面片uw关于u和w的二阶偏导数向量,于是u0uu表示边界线u0上的二阶切向量,u0ww表示边界线u0上的二阶跨界切向量。,uwuw为曲面片P在点(u,w)处的扭曲向量。特别,用00,01,10,11分别表示曲面片四个角点时,00uw,01uw,10uw,11uw就分别表示在四个角点的扭曲向量。,构造具有指定边界曲线的曲面片 Coons给出的一个解法是:寻找两个混合函数f0(t)和f1(t),它们是连续的,并且满足f0(0)=1,f0(1)=0,f1(0)=0,f1(1)=1,且f0(t)+f1(t)=1,0t1。利用这样的混合函数,通过四条边界构造曲面片,并通过叠加修正曲面片,产生满足用户需要的曲面。,若给定四条边界曲线u0,u1,0w,1w,且0u1,0w1 在u向进行线性插值,得到直纹面为:,在w向进行线性插值,得到直纹面为:,若把这两张直纹面叠加可得到一张新曲面Ps(u,w):,Ps(u,w)上的任意一点,其位移矢量包含两个部分,一部分是由于线性插值而产生的位移,另一部分是由于边界曲线而产生的位移。,为消除Ps(u,w)中由于线性插值而产生的位移,需要构造一个新的曲面P3(u,w),构造曲面P3(u,w)后,从Ps(u,w)中去除P3(u,w),即去除线性插值的成分,则得到Coons构造曲面 P(u,w)=Ps(u,w)-P3(u,w)=P1(u,w)+P2(u,w)-P3(u,w)可写成如下形式:,其中矩阵M是:,矩阵中四个元素是四个角点的位置向量,可用已知四条边界曲线计算求出。u0,u1可以是关于u的三次多项式,0w,1w可以是关于w的三次多项式,混合函数也是不超过三次的关于u或w的三次多项式,这时公式关于u看,或关于w看,都是三次多项式,是关于u或w的双三次多项式,不难验证它们符合所提问题的要求,例如我们来验证0w是它的一条边界线,这只要把u=0代入公式右端,得,曲面片以指定的曲线为其边界曲线,且有指定的跨界切向量。利用本章第二节定义的四个混合函数q00(t),q01(t),q10(t),q11(t)。这四个函数均是三次多项式,连续可微,并且还满足下面的条件:,设已经给定四条边界曲线u0,u1,0w,1w及沿这四条边界曲线的跨界切向量u0w,u1w,0wu,1wu。这时可以计算求得四个角点的位置向量00,01,10,11,切向量00w,01w,10w,11w,00u,01u,10u,11u,以及扭曲向量00uw,01uw,10uw,11uw,可以写出符合要求曲面片的数学表达式如下:,容易地验证所写出的公式满足要求,例如以u=0代入该式右端,得:,曲面片沿边界线取给定的各跨界切向量,可先对该式关于某一变量求导,例如对u求导,然后再代入u=0,这时有,指定四个角点以及在这些点上的切向量和扭曲向量后,求解曲面的表达式。已知角点位置向量00,10以及在这两点关于u的切向量00u和01u,可以用Hermite插值公式来指定一条u边界线:,将上两式代入前式,就可以得到:,给出四个角点以及在该角点上的切向量和扭曲向量来构造Coons曲面表达式。设在平面上有四点P0,Pl,P2,P3,它们的位置向量分别为(0,0,0),(0,0.75,0),(0.75,0,0),(0.75,0.75,0)。该四点的切向量、跨界切向量和扭曲向量,定义在关于角点的信息矩阵M中:,第四节 Bezier曲线和曲面,Bezier曲线 给出型值点P0,P1,Pn,它们所确定的n次Bezier曲线是:,涉及到的0!及00,按约定均为1。在n=1时,公式成为:,在n=2时,公式成为:,在n=3时,公式成为:,Bezier曲线的一些重要性质,P(0)=P0,P(1)=P1,曲线通过所给出型值点列的起点和终点。,Bezier曲线的对称性,曲线的凸包性 对给定的型值点P0,P1,Pn点集,分段的三次Bezier曲线光滑连接,设给出两个Bezier多边形P0P1P2P3和Q0QlQ2Q3,显然,使所决定的两条Bezier曲线在连接点处连续的条件是P3=Q0。Bezier曲线在连接点处G1连续,即一阶导数几何连续,就要求Q0=aP3,这里a应该是一个正数。由前面的公式,知Q0=3(Q1Q0),P3=3(P3P2),因此可知使在连接点处G1连续的条件是:,由此得,连接点处达到C2连续,即二阶导数参数连续的条件 对前面的公式求两次导数,可得,,于是知,要求,即,注意到Q0=P3,由此得:,绘制Bezier曲线时,可以利用其定义式,对参数t选取足够多的值,计算曲线上的一些点,然后用折线连接来近似画出实际的曲线。随着选取点增多,折线和曲线可以任意接近。假设给定的四个型值点是P0=(1,1),Pl=(2,3),P2=(4,3),P3=(3,1),则计算结果见表,绘制Bezier曲线的方法,几何作图法分裂法,记点Pk,Pk+l,Pl可以生成的Bezier曲线为Pk,l(t),0t1,则成立下面的递推关系:,证明上式,要用到组合等式:,void bez_to_points(int n,int npoints,double P,double points)/P为控制点坐标 points为采用几何作图算法生成的Bezier曲线上的离散点序列离散点序列points的个数为npoints 控制点P的个数为n+1 double t,delt;delt=1.0/(double)npoints;/将参数t npoints等分t=0.0;for(int i=0;i=npoints;i+)pointsi=decas(n,P,t);/分别求出npoints+1个离散点points的坐标t+=delt;,double decas(int n,double P,double t)int m,i;double*R,*Q,P0;R=new doublen+1;Q=new doublen+1;for(i=0;i0;m-),/n次Bezier曲线在点t的值,可由两条n-1次Bezier曲线/在点t的值通过线性组合而求得。Qi=R i+t*(R i+1-R i);for(i=0;i=m-1;i+)Ri=Q i;P0=R0;delete R;delete Q;return(P0);,设给出四点的坐标是(1,1),(2,3),(4,3),(3,1),求所确定三次Bezier曲线在t=1/3时的值P(1/3),算法的计算过程,Bezier几何作图算法计算过程,设控制点序列P0,P1,Pn确定的n次Bezier曲线是P(t),用如下递归方式计算另一组点集:,如果令Pa(s)和Pb(s)分别是以控制点序列 和 确定的Bezier曲线,其中0s1,那么就有:,己知四点P0,P1,P2,P3,确定了一条三次Bezier曲线P(t),可写出下式,,分裂法中的递归计算,分裂法的示意图,可通过计算验证Bezier曲线由前后两段构成。现以P0的系数为例,验证两端它的系数是相等的。左端显然就是。先看右端。若0t,这时就用前半段的表达式,观察分裂计算图注意到 中有1份P0,中有 份,中是 份,中是 份,因此全部P0的系数是:,右端对 t1,注意到仅 中有 份的P0,知P0的系数是:,设己知三次Bezier曲线P(t)的控制顶点是P0,P1,P2,P3,在P()处将曲线分为两段,求出前半段的控制顶点Q0,Ql,Q2,Q3和后半段的控制顶点R0,R1,R2,R3,。有算法如下,void split_Bezier(Point P)Point R4,Q4;int i,j;for(i=0;i=3;i+)Ri=Pi;,for(i=0;i=2;i+)Qi=R0;for(j=0;j=2-i;j+)Rj.x=(Rj.x+Rj+1.x)/2;/分别对相邻两控制点间的线段进行分裂 Rj.y=(Rj.y+Rj+1.y)/2;Q3=R0;,分裂算法的计算,根据Bezier曲线的凸包性质,知道曲线上任意一点到线段P0P3的距离,小于P1和P2到线段P0P3距离中的较大者,即有:,任意事先给定的对画出曲线近似程度的要求0,可以取max(d(P1,P0P3),d(P2,P0P3)为分裂停止的条件。,void new_split_Bezier(Point P)Point R4,Q4;int i,j;const double epsilon=0.01;if(maxdistance(P)epsilon)/*maxdistance(P)为求max(d(P1,P0P3),d(P2,P0P3)的函数*/,MoveTo(P0.x,P0.y);LineTo(P3.x,P3.y);elsefor(i=0;i=3;i+)Ri=Pi;for(i=0;i=2;i+)Qi=R0;for(j=0;j=2-i;j+)Rj.x=(Rj.x+Rj+1.x)/2;Rj.y=(Rj.y+Rj+1.y)/2;Q3=R0;new_split_Bezier(Q);new_split_Bezier(R);,有理Bezier曲线,图中h0=h1=h3=1,当h2=0、1/2、1、2、4时曲线逐渐地靠近P2点,Bezier曲面,若在空间给定(m+1)(n十1)个控制点,Vij,i=0,1,m,j=0,1,n,令,上式曲面为mn次的Bezier曲面,当m=n=1,公式成为:,设v00,v01,v10,v11四点依次是(0,0,0),(1,0,0),(0,1,0),(0,0,1),则可得P1,1(u,w)的坐标形式的参数方程为:,消去参数,就得马鞍面方程:,当m=n=3,曲面成为:,设同一个曲面片,用Coons曲面形式确定它,又用Bezier形式确定它,现在来考查、矩阵M与矩阵B有什么关系。,求解上式得:,四个角点00,0l,10和11分别对应控制点V00,V03,V30和V33,这是很自然的。关于切向量,例如00w=3(V01-V00),表明00w,是沿从V00到V01边的方向,大小是两个位置向量差的3倍,其余切向量是类似的。,00uw,有:,00uw还可以写做:,双三次Coons曲面与Bezier曲面间的关系,第五节 B样条曲线和曲面,B样条曲线 给定n+1个控制点P0,P1,Pn,它们所确定的k阶B样条曲线是:,其中Ni,k(u)递归定义如下:,这里u0,u1,un+k,是一个非递减的序列,称为节点,(u0,u1,un+k)称为节点向量。定义中可能出现,这时约定为0。,选取,n=2,k=1,控制顶点是P0,P1,P2,这样应选择参数节点n+k+1=4个,设节点向量是(u0,u1,u2,u3),按式定义,可写出三个基函数:,由公式可知所定义的B样条曲线是,选取n=3,k=2,于是有四个控制顶点P0,P1,P2,P3,应有参数节点n+k+1=6个,设节点向量是(0,0,1,2,3,3),试画出所确定的2阶B样条曲线。取u=0.5,进行计算。因为0.50,1=u1,u2,因此N1,1(0.5)=1,而其它的Ni,1(0.5)=0,i1。往下公式做递归计算。,N2,2(0.5)和N3,2(0.5),不必计算,因为计算它们需要的i2时的Ni,1(0.5)=0,所以知N2,2(0.5)=N3,2(0.5)=0。这样代入公式计算P(0.5),有:,再取u其它一些值进行计算,结果如表所示。,选取n=3,k=4,平面上四个控制顶点P0,P1,P2,P3的坐标依次是(1,1),(2,3),(4,3),(3,1),这时应取参数节点n+k+1=8个,设选取节点向量为(0,0,0,0,1,1,1,1),画出所确定的4阶B样条曲线。计算N1,4(0.5),其中0.50,1=u3,u4,N3,1(0.5)=1,而对i3,Ni,1(0.5)=0。,用类似的过程可计算求出:,曲线上对应参数u=0.5的点是:,可以证明更一般的结论,即,n+1个控制点P0,P1,Pn所确定的最高阶的B样条曲线是k=n+1阶的,这时由节点向量(0,0,0,1,1,1)所确定的B样条曲线,与该n+1个控制点所确定的Bezier曲线相同。在参数节点的众多选取方法中,最多使用的是选择参数u的每一区间为等长的情况,这时所得到的B样条函数称为是等距的,或均匀的。以下我们转入讨论等距的B样条曲线。考虑使用较多的情况,可假定ui=i,i=0,1,n+k,再引入tj=u-ui+j,因为这可以使得 ui+juui+j+1与0tj1是一致的。,递归式,经过计算,可以写出:,如果固定在ui+3uui+4区间,可以写出:,上述结果对任意的i成立,令i=0,可写出四个B样条函数:,由节点向量(0,1,2,3,4)所确定的均匀B样条基函数Ni,4(u)曲线(i=0,1,2,3)。图所示的B样条基函数Ni,4(u)由四条三次多项式曲线片拼接而成。当节点在区间ui,ui+k上B样条曲线基函数Ni,k(u)大于0,而在其它区间上则为0,并且Ni,k(u)在节点(ui,ui+1,ui+k)处是连续的,设给出n+1个控制点P0,P1,Pn,则所确定的4阶3次等距B样条曲线是:,曲线的性质,Pi,Pi+1,Pi+2,Pi+3确定的一段曲线的起点的位置向量、切线向量及二阶导向量,事实上都只与PiPi+1Pi+2有关,而终点处各量只与Pi+1Pi+2Pi+3,有关。如果考虑接下去的一段曲线,即Pi+1,Pi+2,Pi+3,Pi+4确定的一段,在其起点,上述各量就只与Pi+1Pi+2Pi+3有关,并恰好是前一段曲线终点处的上述各量,自然是对应相等的。这就证明了曲线在拚接处是连续的,一阶和二阶导数也是连续的。因此知道4阶3次等距B样条曲线:虽然分段确定,但各段拚接处有直到二阶导数的连续性,整条曲线是光滑的。,4阶3次等距B样条曲线具有凸包性,这通过验证0Nj,4(u)1,0j3及,用B样条曲线可构造直线段、尖点、切线等特殊情况。对于4阶3次B样条曲线P(u)若要在其中得到一条直线段,只要控制点Pi,Pi+1,Pi+2,Pi+3四点位于一条直线上,此时P(u)对应的ui+3uui+4的曲线即为一段直线,且和Pi,Pi+1,Pi+2,Pi+3所在的直线重合。为了使P(u)能过Pi点,只要Pi,Pi+1,Pi+2三点重合,此时P(u)过Pi点(尖点)。,B样条曲面,0u1,0w1,0kK,0lL每一个曲面片Qkl(u,w)由16个控制点确定。,思 考 题,P99页1、15题,