计算机图形学(第3版)课件:曲线和曲面_第1页
计算机图形学(第3版)课件:曲线和曲面_第2页
计算机图形学(第3版)课件:曲线和曲面_第3页
计算机图形学(第3版)课件:曲线和曲面_第4页
计算机图形学(第3版)课件:曲线和曲面_第5页
已阅读5页,还剩129页未读 继续免费阅读

下载本文档

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

文档简介

2024/12/141计算机图形学

曲线和曲面

第一节曲线和曲面表示的基础知识第二节Hermite多项式第三节Bezier曲线第四节Bezier曲面第五节B样条曲线第六节B样条曲面第一节曲线和曲面表示的基础知识

曲线和曲面参数表示

(1)与坐标轴相关的,不便于进行坐标变换;(2)会出现斜率为无穷大的情况;(3)难以灵活地构造复杂的曲线、曲面(4)非参数的显示方程只能描述平面曲线,空间曲线必须定义为两张柱面的交线。(5)假如我们使用非参数化函数,在某个xoy坐标系里一条曲线,一些x值对应多个y值,而一些y值对应多个x值。

在空间曲线的参数表示中,曲线上每一点的坐标均要表示成某个参数t的一个函数式,则曲线上每一点笛卡尔坐标参数式是:,,

把三个方程合写到一起,曲线上一点坐标的矢量表示是:关于参数t的切矢量或导函数是:曲面写为参数方程形式为:曲线或曲面的某一部分,可以简单地用a≤u,w≤b界定它的范围直线段端点坐标分别是P1[x1,y1],P2[x2,y2],直线段的参数表达式是:P(t)=

P1+(

P2-

P1)t=(1-t)P1+tP2

0≤t≤1;参数表示相应的x,y坐标分量是:x(t)=x1+(x2-x1)t

y(t)=y1+(y2-y1)t0≤t≤1参数方程具有如下优点:有更大的自由度来控制曲线、曲面的形状。便于坐标变换便于处理斜率为无限大的问题,不会因此中断计算代数、几何相关和无关的变量是完全分离的,而且对变量个数不限,便于向高维空间扩展。

t∈[0,1],直接定义了边界。便于曲线和曲面的分段、分片描述。易于用矢量和矩阵表示,从而简化了计算。曲线和曲面可以分为两类。一类要求通过事先给定的离散的点,称为是插值的曲线或曲面。另一类不要求通过事先给定的各离散点,而只是用给定各离散点形成的控制多边形来控制形状,称为是逼近的曲线或曲面。

插值构造一条曲线顺序通过型值点,称为对这些型值点进行插值(interpolation)。逼近构造一条曲线,使它在某种意义上最接近这些型值点但不完全通过,称之为对这些型值点进行逼近(approximation)。参数连续性一函数在某一点x0处具有相等的直到k阶的左右导数,称它在x0处是k次连续可微的,或称它在x0处是k阶连续的,记作Ck。几何上C0、C1、C2依次表示该函数的图形、切线方向、曲率是连续的。参数曲线的可微性称为参数曲线的连续性。几何连续性

两曲线段的相应的弧长参数化在公共连接点处参数导数成比例而不是相等,则称它们在该点处具有k阶几何连续性,记作Gk

。 零阶几何连续G0与零阶参数连续C0是一致的。 一阶几何连续G1指一阶导数在两个相邻曲线段的交点处成比例,即方向相同,大小不同。 二阶几何连续G2指两个曲线段在交点处其一阶和二阶导数均成比例。曲线段间C1、C2和G1、G2连续性定义(1)Q1(1)=Q2(0),则Q1(t)和Q2(t)在P处有C0和G0连续性(2)Q1(1)和Q2(0)在P处重合,且其在P点处的切矢量方向相同,大小相等,则Q1(t)和Q2(t)在P处有C1连续性(3)Q1(1)和Q2(0)在P处重合,且其在P点处的切矢量方向相同,大小不等,则Q1(t)和Q2(t)在P处有G1连续性Q1(0)Q1(1)Q2(0)Q2(1)Q1(0)Q2(1)Q1(1)Q2(0)Q1(0)Q2(1)Q1(1)Q2(0)曲线段间C1、C2和G1、G2连续性定义(4)Q1(1)和Q2(0)在P处已有C0和C1连续,且Q”1(1)和Q”2(0)大小方向均相同,则Q1(t)和Q2(t)在P处有C2连续性(5)Q1(1)和Q2(0)在P处已有G0和G1连续,且Q”1(1)和Q”2(0)方向相同但大小不等,则Q1(t)和Q2(t)在P处有G2连续性(6)推广之,Q1(1)和Q2(0)在P处已有C0、C1、…、Cn连续,若Q(n)1(1)和Q(n)2(0)在P处大小和方向均相同,则说Q1(t)和Q2(t)在P处具有Cn连续性Q1(0)Q1(1)Q2(0)Q2(1)Q1(0)Q1(1)Q2(0)Q2(1)曲线段间C1、C2和G1、G2连续性定义(1)Q1(1)=Q2(0),则Q1(t)和Q2(t)在P处有C0和G0连续性(2)Q1(1)和Q2(0)在P处重合,且其在P点处的切矢量方向相同,大小相等,则Q1(t)和Q2(t)在P处有C1连续性(3)Q1(1)和Q2(0)在P处重合,且其在P点处的切矢量方向相同,大小不等,则Q1(t)和Q2(t)在P处有G1连续性(4)Q1(1)和Q2(0)在P处已有C0和C1连续,且Q”1(1)和Q”2(0)大小方向均相同,则Q1(t)和Q2(t)在P处有C2连续性(5)Q1(1)和Q2(0)在P处已有G0和G1连续,且Q”1(1)和Q”2(0)方向相同但大小不等,则Q1(t)和Q2(t)在P处有G2连续性(6)推广之,Q1(1)和Q2(0)在P处已有C0、C1、…、Cn连续,若Q(n)1(1)和Q(n)2(0)在P处大小和方向均相同,则说Q1(t)和Q2(t)在P处具有Cn连续性C0连续的线性插值C2连续的样条插值光顺

光顺(smoothness)是指曲线的拐点不能太多,要光滑顺畅。对于平面曲线相对光顺的条件应该是:(1)具有二阶几何连续(G2);(2)不存在多余拐点和奇异点;(3)曲率变化较小。第二节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),满足下面的插值条件:一、Lagrange插值

已知f(t)在k+1个点上的函数值f(ti),求一个k次多项式使之满足。

设表示一条曲线的某个函数f(t)在三点t0,t1,t2的函数值f(t0),f(t1),f(t2),根据Lagrange插值法,则二次多项式P(t)可表示为:g0(t)g2(t)g1(t)

设表示一条曲线的某个函数f(t)在四点t0,t1,t2,t3的函数值f(t0),f(t1),f(t2),f(t3),根据Lagrange插值法,则三次多项式P(t)可表示为:g0(t)g3(t)g1(t)g2(t)一般地,对于k+1个点,若曲线表达式中满足是连续的●●则称为混合(调和)函数或基称为控制点。函数,k+1个点二、三次Hermite曲线考察k=1,m0=m1=2的情形已知表示一条曲线的某个函数f(t)在两点0,1的函数值f(0),f(1)和一阶导数值f’(0),f’(1),求三次多项式P(t):把a0,a1,a2和a3代入(4-18)式则有:(4-18)得图4-5规范化3次Hermite插值的四个调和函数四、分段3次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]中引入如下一些基本函数:a0,0a1,0n=1为了完整地写出这个插值多项式,可以在区间[ti,ti+1]中引入如下一些基本函数:n=2a0,0a1,0a2,0完整的插值多项式可写为:上式区间[t0,tn]中有定义,且为分段定义。在每个区间[ti,ti+1]上,都恰有四项。满足插值条件每段曲线Pi(t)只在[ti,ti+1]中有定义:自变量的线性变换用逆变换代入,将所得关于u的多项式记为,得其中例:设在平面上有两点P0,Pl,它们的位置向量分别为(1,1),(4,2),在P0的导数值即在该点的切线向量P’0=(1,1),在Pl处P’1=(1,-1),构造曲线。

第三节Bezier曲线1.Bezier曲线定义

给出型值点P0,P1,…,Pn,它们所确定的n次Bezier曲线是:

是Bernstein多项式,混合函数涉及到的0!及00,按约定均为1。在n=1时,公式成为:(一次Bezier曲线是直线段)

在n=2时,公式成为:(二次Bezier曲线是抛物线)

在n=3时,公式成为:(三次Bezier曲线是三次参数多项式曲线)Bernstein基函数的性质(1)正性(2)端点性质(3)规范性 (4)对称性 (5)权性 (6)递推性

(7)导函数在处达到最大值。(8)最大值(7)导函数2、

Bezier曲线的性质

P(0)=

P0,P(1)=P1,曲线通过所给出型值点列的起点和终点。

i=0i=n·二阶导数

Bezier曲线的对称性

·曲线的凸包性

对给定的型值点P0,P1,…,Pn点集,点集称作n+1个点张成的凸包·几何不变性3、Bezier曲线的拼接P0P1P2P3和Q0QlQ2Q3,两个Bezier多边形①曲线在连接点处C0连续的条件是P3=Q0②曲线在连接点处G1连续,即一阶导数几何连续,条件是Q’0=aP’3 ,a是一个正数。

P2,

P3=Q0,

Ql,共线且P2和Ql在P3两侧③连接点处达到C2连续,即二阶导数参数连续的条件,对前面的公式求两次导数,可得,于是知,要求,即,注意到Q0=P3,由此得:4、Bezier曲线绘制①利用定义式Bezier曲线的绘制,可以利用其定义式,对参数t选取足够多的值,计算曲线上的一些点,然后用折线连接来近似画出实际的曲线。随着选取点增多,折线和曲线可以任意接近。假设给定的四个型值点是P0=(1,1),Pl=(2,3),P2=(4,3),P3=(3,1),则计算结果见表t(1-t)33t(1-t)23t2(1-t)t3P(t)01000(1,1)0.150.6140.3250.05740.0034(1.5058,1.765)0.350.2750.4440.2390.043(2.248,2.376)0.50.1250.3750.3750.125(2.75,2.5)0.650.0430.2390.4440.275(3.122,2.36)0.850.00340.05740.3250.614(3.248,1.75)10001(3,1)几何作图法

记点Pk,Pk+l,…,Pk+n可以生成的Bézier曲线为,0≤t≤1则成立下面的递推关系:证明上式,要用到组合等式:

上式改写为:

doubledecas(intn,doubleP[],doublet){ intm,i; double*R,*Q,P0; R=newdouble[n+1]; Q=newdouble[n+1]; for(i=0;i<=n;i++) R[i]=P[i];//将控制点坐标P保存于R中

//需要作n次外部循环,方能产生最终Bezier曲线在点t的值

for(m=n;m>0;m--){//n次Bezier曲线在点t的值,可由两条n-1次Bezier曲线//在点t的值通过线性组合而求得。

for(i=0;i<m;i++) Q[i]=R[i]+t*(R[i+1]-R[i]); for(i=0;i<m;i++) R[i]=Q[i]; } P0=R[0]; deleteR; deleteQ; return(P0);}

voidbez_to_points(intn,intnpoints,doubleP[],doublepoints[])//P为控制点坐标

//

points为采用几何作图算法生成的Bezier曲线上的离散点序列//离散点序列points的个数为npoints+1

//控制点P的个数为n+1

{ doublet,delt; delt=1.0/(double)npoints;//将参数tnpoints等分

t=0.0; for(inti=0;i<=npoints;i++) { //分别求出npoints+1个离散点points的坐标

points[i]=decas(n,P,t);

t+=delt; }}

设给出四点的坐标是(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曲线,其中0≤s≤1,那么就有:己知四点P0,P1,P2,P3,确定了一条三次Bezier曲线P(t),可写出下式,

分裂法中的递归计算分裂法的示意图

验证Bezier曲线分成前后两段的正确性。以P0的系数为例,验证两端它的系数是相等的。左端显然就是B0,3(t)=(1-t)3。再看右端。若0≤t≤,这时就用前半段的表达式,观察分裂计算图注意到中有1份P0,中有份,中是份,中是份。

右端对≤t≤1,注意到仅中有份的P0。1/21/41/81/21/23/81/21/4设己知三次Bezier曲线P(t)的控制顶点是P0,P1,P2,P3,在P()处将曲线分为两段,求出前半段的控制顶点Q0,Ql,Q2,Q3和后半段的控制顶点R0,R1,R2,R3。有算法如下voidsplit_Bezier(PointP[]){ PointR[4],Q[4]; inti,j; for(i=0;i<=3;i++) R[i]=P[i];

for(i=0;i<=2;i++)

{ Q[i]=R[0]; for(j=0;j<=2-i;j++){ //分别对相邻两控制点间的线段进行分裂

R[j].x=(R[j].x+R[j+1].x)/2; R[j].y=(R[j].y+R[j+1].y)/2; } } Q[3]=R[0];}分裂算法的计算根据Bezier曲线的凸包性质,知道曲线上任意一点到线段P0P3的距离,小于P1和P2到线段P0P3距离中的较大者,即有:任意事先给定的对画出曲线近似程度的要求ε>0,可以取max(d(P1,P0P3),d(P2,P0P3))<ε为分裂停止的条件。voidnew_split_Bezier(PointP[]){ PointR[4],Q[4]; inti,j; constdoubleepsilon=0.01; if(maxdistance(P)<epsilon){ /*maxdistance(P)为求max(d(P1,P0P3),d(P2,P0P3))的函数*/ MoveTo(P[0].x,P[0].y); LineTo(P[3].x,P[3].y); }else{ for(i=0;i<=3;i++)R[i]=P[i]; for(i=0;i<=2;i++){ Q[i]=R[0]; for(j=0;j<=2-i;j++){ R[j].x=(R[j].x+R[j+1].x)/2; R[j].y=(R[j].y+R[j+1].y)/2; } } Q[3]=R[0]; new_split_Bezier(Q);new_split_Bezier(R); }}doublemaxdistance(Pointp[]){ doubles1,s2,h1,h2; s1=((p[0].x-p[1].x)*(p[0].y+p[1].y)+ (p[1].x-p[3].x)*(p[1].y+p[3].y)+ (p[3].x-p[0].x)*(p[3].y+p[0].y)); s2=((p[0].x-p[2].x)*(p[0].y+p[2].y)+ (p[2].x-p[3].x)*(p[2].y+p[3].y)+ (p[3].x-p[0].x)*(p[3].y+p[0].y)); doubledistance=sqrt((p[0].x-p[3].x)*(p[0].x-p[3].x)+ (p[0].y-p[3].y)*(p[0].y-p[3].y)); h1=fabs(s1/distance); h2=fabs(s2/distance); returnmax(h1,h2);} 五、Bézier曲线的升阶设给定原始控制顶点P0,P1,…,Pn,定义了一条n次Bézier曲线,增加一个顶点,曲线提升一阶后,仍定义同一条曲线的新控制顶点为则有对上式左边乘以得比较等式两边项的系数,得两边除以,得式中1新的控制顶点是以参数值按分段线性插值从原始控制多边形得出的。2升阶后新的控制多边形在原始控制多边形的凸包内。3控制多边形更靠近曲线。此式说明:六、有理Bezier曲线

图中h0=h1=h3=1,当h2=0、1/2、1、2、4时曲线逐渐地靠近P2点

图中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,令上式曲面为m×n次的Bezier曲面二、Bézier曲面的性质(2)边界线位置(1)端点位置是曲面的四个端点Bézier曲面的四条边界线以、和,为控制多边、形的Bézier曲线(3)端点的切平面,相切

、、、三角面在、、、处与曲面(4)凸包性

位于其控制顶点Vij,

(i=0,1,…,m,j=0,1,…,n)

的凸包内。

的形状和位置与坐标系选

择无关,仅和点Vij,(i=0,1,…,

m,j=0,1,…,n)的相对位置有关。(5)几何不变性曲面曲面三、Bézier曲面示例(1)双一次(线性)Bézier曲面当m=n=1时,得双—次(线性)Bézier曲面。给定(m+1)×(n+1)=2×2=4个控制点:

设V0,0,V0,1,V1,0,V1,1四点依次是(0,0,0),(1,0,0),(0,1,0),(0,0,1),则可得P1,1(u,w)的坐标形式的参数方程为:双曲抛物面(马鞍面)方程

(2)双二次Bézier曲面

当m=n=2时,得到双二次Bézier曲面,给定(m+1)×(n+1)=3×3=9个控制点,即

(3)双三次Bézier曲面当m=n=3时,得到双三次Bézier曲面,给定(m+1)×(n+1)=4×4=16个控制点

四、Bézier曲面的拼接控制网格(1)连续于是有(2)连续最简单的解: 两曲面片在该边界上有公共的切平面

两边关于w的多项式次数相同

或 第五节B样条曲线一、B样条曲线的定义给定n+1个控制点P0,P1,…,Pn,它们所确定的k阶B样条曲线是:其中Ni,k(u)递归定义如下:这里u0,u1,…,un+k,是一个非递减的序列,称为节点,(u0,u1,…,un+k)称为节点向量。定义中可能出现,这时约定为0。B样条曲线包含n-k+2段。

由k阶B样条曲线的递归定义可以看出:(1)对n+1个控制点,曲线由n+1个混合函数所描述。(2)每个混合函数定义在u取值范围的k个子区间,以节点向量值ui为起点。(3)参数u的取值范围由n+k+1个给定节点向量值分成n+k个子区间。(4)节点向量(u0,u1,…,un+k)所生成的B样条曲线仅定义在从节点值到节点值的区间上。(5)任一控制点可以影响最多k个曲线段的形状。(6)是分段参数多项式。在每一区间上都是次数不高于k-1的多项式。从B样条曲线的这个递归定义可以看出,曲线与给定的阶数k及节点向量都有关系。就是说,即使k相同,选择不同的节点向量,也能得到不同的曲线。选取,n=2,k=1,控制顶点是P0,P1,P2,这样应选择参数节点n+k+1=4个,设节点向量是(u0,u1,u2,u3),按式定义,可写出三个基函数:由公式可知所定义的B样条曲线是

2阶B样条由两个1阶B样条与递归推得,是它们的凸线性组合节点向量为(0,1,2)的2阶B样条基函数如图由两个2阶B样条Ni,2与Ni+1,2递推生成3阶B样条Ni,3Ni,2Ni+1,2Ni,3由两个3阶B样条Ni,3与Ni+1,3递推生成4阶B样条Ni,4Ni,3Ni+1,3Ni,4B样条基函数有下列性质:(1)正性和局部性(2)规范性(3)权性:对从节点值到区间上的任一值u,全体基函数之和为1(4)递推性:二、B样条曲线的性质(1)连续性:连续性(节点不重)(2)可微性:在定义域内重复度为p的节点处有k-1-p次可微,或具有连续性(3)凸包性:(4)正性和局部支承性:(5)几何不变性:(6)近似性:

在参数节点的众多选取方法中,最多使用的是选择参数u的每一区间为等长的情况,这时所得到的B样条函数称为是等距的,或均匀的。假定ui=i,i=0,1,…,n+k。

三、均匀B样条曲线(1)均匀B样条递归式,经过计算,可以写出:由两个2阶B样条Ni,2与Ni+1,2递推生成3阶B样条Ni,3Ni,2Ni+1,2Ni,3由两个3阶B样条Ni,3与Ni+1,3递推生成4阶B样条Ni,4Ni,3Ni+1,3Ni,4如果固定在ui+3≤u<ui+4区间,可以写出:对参数进行如下变换tj=u-ui+j以简化上式,这仍可以使ui+j≤u<ui+j+1与0≤tj<1保持一致的。上述结果对任意的0≤i≤n-3成立,令i=0,可写出四个B样条函数:

上述结果对任意的i成立,令i=0,同时对t3用u进行名称替换,可写出四个4阶3次B样条基函数:设给出n+1个控制点P0,P1,…,Pn,则所确定的4阶3次等距B样条曲线:整条曲线是分段定义第0段Q0(u)仅由顶点P0,P1,P2,P3确定。第1段Q1(u)由P1,P2,P3,P4确定,…,第n-3段由Pn-3,Pn-2,Pn-1,Pn确定。

按照同样的方法,可以写出2阶1次和3阶2次均匀B样条曲线的表达式:(2)均匀B样条曲线的拼接问题(2)均匀B样条曲线的拼接问题(2)均匀B样条曲线的拼接问题Qi(0)是控制点Pi,Pi+1,Pi+2,Pi+3确定的一段曲线的起点。将它的表达式改为该点处的二阶导数是Q''i(0),改写为

(3)特殊曲线的控制点配置1.对于4阶3次均匀B样条曲线P(u),若要在其中得到一条直线段,只要控制点Pi,Pi+1,Pi+2,Pi+3四点位于一条直线上,此时P(u)对应的ui+3≤u≤ui+4的曲线即为一段直线,且和Pi,Pi+1,Pi+2,Pi+3所在的直线重合。2.为了使P(u)能过Pi点,只要Pi,Pi+1,Pi+2三点重合,此时P(u)过Pi点(尖点)。3.为了使B样条曲线P(u)和某一直线L相切,只要求B样条曲线的控制点Pi,Pi+1,Pi+2位于L上。由k阶B样条曲线的递归定义可以看出:(1)对n+1个控制点,曲线由n+1个混合函数所描述(2)每个混合函数定义在u取值范围的k个子区间,以节点向量值ui为起点。(3)参数u的取值范围由n+k+1个给定节点向量值分成n+k个子区间。(4)节点向量(u0,u1,…,un+k)所生成的B样条曲线仅定义在从节点值到节点值的区间上。(5)任一控制点可以影响最多k个曲线段的形状。(6)是分段参数多项式。在每一区间上都是次数不高于k-1的多项式。四、准均匀B样条曲线

给定n+1个控制点的k阶B样条,其参数值k和n通过下列计算可以生成准均匀具有整型节点的向量

准均匀B样条多项式曲线通过第一和最后一个控制点。参数曲线在第一个控制点处的切向量平行于头两个控制点的连线;最后一个控制点处的切向量则平行于最后两个控制点的连线。

选取n=3,k=2,于是有四个控制顶点P0,P1,P2,P3应有参数节点n+k+1=6个,设节点向量是(0,0,1,2,3,3),确定2阶B样条曲线。

取n=4(5个控制点),k=3,可得节点向量的8个值事实上,当k=n+1时,由式得准均匀节点向量为

该节点向量定义的k阶k-1次B样条基函数就是k-1次Bernstein基函数,准均匀B样条曲线退化为Bézier样条曲线选取n=3,k=4,四个控制顶点为P0,P1,P2,P3,参数节点n+k+1=8个,设选取节点向量为(0,0,0,0,1,1,1,1)

00001111000011110000111100001111uiui+1ui+2ui+3ui+4ui+5ui+6ui+7ui+8ui+9Ni,4Ni+1,4Ni+2,4Ni+3,4Ni+4,4Ni+5,4PiPi+1Pi+2Pi+3Pi+4Pi+5K=4,N=5在[ui+3,ui+4]节点区间内,只受Pi,Pi+1,Pi+2,Pi+3,4个控制点的影响,不受Pi+4,Pi+5的影响,因为其对应的基函数Ni,4,Ni+1,Ni+2,Ni+3处于[ui+3,ui+4]节点区间内。因此当改变Pi+4,Pi+5的位置,不会影响[ui+3,ui+4]节点区间内的曲线形状。以此可以说明B样条曲线的局部支撑性。对此进行扩展,可以说明[ui,ui+1]节点区间内,只受Pj,j=i-k+1…I,k个控制点的影响,此处k=3五、B样条曲线的绘制(1)deBoor算法曲线至多与k个顶点有关由j替换j+1只与第i-k+2至第i个节点有关只与第i-k+2至第i个节点有关21+-kiP2+-kiPiP]1[2+-kiP]1[3+-kiP]1[iP]2[3+-kiP]2[iP]3[4+-kiP]1[-kiP1+-kiP+-kiPiP]1[2+-kiP]1[3+-kiP]1[iP]2[3+-kiP]2[iP]3[4+-kiP]1[-kiP21+-kiP2+-kiPiP]1[2+-kiP]1[3+-kiP]1[iP]2[3+-kiP]2[iP]3[4+-kiP]1[-kiP1+-kiP+-kiPiP]1[2+-kiP]1[3+-kiP]1[iP]2[3+-kiP]2[iP]3[4+-kiP]1[-kiP21+-kiP2+-kiPiP]1[2+-kiP]1[3+-kiP]1[iP]2[3+-kiP]2[iP]3[4+-kiP]1[-kiP1+-kiP+-kiPiP]1[2+-kiP]1[3+-kiP]1[iP]2[3+-kiP]2[iP]3[4+-kiP]1[-kiPvoidbspline_to_points(PointCP[],intn,intk,doubleknot[],Pointpts[],intnpoints){ doubleu,delt; inti,j; //在每个节点区间,将参数t变化区间进行npoints等分

delt=(knot[n+1]-knot[k-1])/(double)npoints; i=k-1; u=knot[k-1];//u=knot[i]; for(j=0;j<=npoints;j++){ while((i<n)&&(u>knot[i+1]))i++;//确定参数u所在的节点区间[ui,ui+1) //在每个节点区间,分别求出npoints个离散点pts的坐标

pts[j]=deboor(CP,i,k,knot,u); u+=delt; }}//输入参数CP为控制点坐标//控制点CP的个数为n+1//输入参数k为B样条曲线的阶数//输入参数knot为B样条曲线节点向量//节点向量kn

温馨提示

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

评论

0/150

提交评论