文档详情

B样条曲线.pptx

发布:2017-05-27约2.44千字共15页下载文档
文本预览下载声明
PowerPoint B样条曲线 学习进展报告 CONTENTS 01 Bezier曲线 Part One 贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋 给定点 P0、P1,线性贝塞尔曲线只是一条两点之间的直线。这条线由下式给出: 当参数t变化时,其过程如下: 线性贝塞尔曲线函数中的t会经过由P0至P1的B(t)所描述的曲线。例如当t=0.25时,B(t)即一条由点P0至P1路径的四分之一处。就像由0至1的连续t,B(t)描述一条由P0至P1的直线。 二次方贝塞尔曲线的路径由给定点 P0、P1、P2 的函数B(t) 追踪: 为建构二次贝塞尔曲线,可以中介点Q0和Q1作为由0至1的t: * 由P0至P1的连续点Q0,描述一条线性贝塞尔曲线。 * 由P1至P2的连续点Q1,描述一条线性贝塞尔曲线。 * 由Q0至Q1的连续点B(t),描述一条二次贝塞尔曲线。 二次曲线看起来是这样的: 对于三次曲线,可由线性贝塞尔曲线描述的中介点Q0、Q1、Q2,和由二次曲线描述的点R0、R1所建构。P0、P1、P2、P3四个点在平面或在三维空间中定义了三次方贝塞尔曲线。曲线起始于P0走向P1,并从P2的方向来到P3。一般不会经过P1或P2;这两个点只是在那里提供方向资讯。P0和P1之间的间距,决定了曲线在转而趋进P3之前,走向P2方向的“长度有多长”。 三次曲线的动态图如下: 给定P0、P1、P2、P3,三次曲线的参数形式如下: 要“画”出贝塞尔曲线,一般需要进行较多的计算,然后绘制出来。 高阶曲线的动态图如下: 更高阶的贝塞尔曲线,可以用以下公式表示:用表示由点P0、P1、…、Pn所决定的贝塞尔曲线。则有: Bezier曲线的一般化形式: 即: 其中多项式: 又称作 n 阶的伯恩斯坦基底多项式,定义 00 = 1。 CONTENTS 02 B样条曲线 Part Two 从Bezier曲线到B样条曲线 Bezier曲线在应用中存在诸多不足: ▲缺乏灵活性 一旦确定了特征多边形的顶点数(m个),也就 确定了曲线的阶次,无法更改; ▲控制性差 当顶点数较高时,曲线的阶次将较高,此时特征多 边形对曲线形状的控制将明显减弱; ▲不易修改 由曲线的混合函数可看出,其值在开区间(0,1)内 均不为零。因此,所定义之曲线在(0t1)的区间内的任何一 点均要受到全部顶点的影响,这使得对曲线进行局部修改成为 不可能。 Bezier曲线改变一点曲线整体受影响 B样条曲线改变一点曲线局部受影响 B样条曲线的优点: 易于进行局部修改; 更逼近特征多边形; 是低阶次的曲线。 均匀B样条曲线的参数表达式为: 式中为n次B样条基函数,其形式为: 其中 nbsp; #includelt;graphics.hgt; #includelt;conio.hgt; float px[10]={50,90,150,120,220,300,380,320,450,500}; float py[10]={100,60,50,150,240,100,100,200,250,130}; void B_spline() { float a0,a1,a2,a3,b0,b1,b2,b3; int k,x,y; float i,t,dt,n=10; setcolor(15); dt=1/n; for(k=0;klt;10;k++) {nbsp;if(k==0) moveto(px[k],py[k]); nbsp;lineto(px[k],py[k]); } setcolor(4); for(k=0;klt;10-3;k++) {nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; if(getch()==17)exit(); B样条曲线的C语言实现 nbsp;a0=(px[k]+4*px[k+1]+px[k+2])/6; nbsp;a1=(px[k+2]-px[k])/2; nbsp;a2=(px[k]-2*px[k+1]+px[k+2])/2; nbsp;a3=-(px[k]-3*px[k+1]+3*px[k+2]-px[k+3])/6; nbsp;b0=(py[k]+4*py[k+1]+py[k+2])/6; nbsp;b1=(py[k+2]-py[k])/2; nbsp;b2=(py[k]-2*py[k+1]+py[k+2])/2; nbsp;b3=-(py[k]-3*py[k+1]+3*py[k+2]-py[k+3])/6; nbsp;for(i=0;ilt;n;
显示全部
相似文档