B样条曲线.pptx
文本预览下载声明
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;
显示全部