Bezier曲线B样条曲线.ppt

  1. 1、本文档共59页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Bezier曲线B样条曲线

Bezier曲线和B样条曲线都是一种自由曲线。自由曲线 是指一条无法用标准代数方程来描述的曲线。在实际中,自 由曲线应用十分广泛,比如轮船身外形放样时的样条曲线, 汽车、飞机及各种产品的外形曲线都可以看成是自由曲线。 计算机产生这种曲线的方法通常有两类: (1)插值的方法:要求生成的曲线通过每个数据点,即型值点。曲线插值方法有多项式插值、分段多项式插值和样条函数插值等。 (2)拟合的方法:要求生成曲线靠近每个数据点(型值点),但不一定要求通过每个点。拟合的方法一般有最小二乘法、 Bezier方法和B样条方法等。 下面主要介绍工程上流行应用的Bezier曲线和B样条曲线。 Bezier曲线是由法国雷诺汽车公司的P.E.Bezier于20世纪70年代初为解决汽车外型设计而提出的一种新的参数表示法,这种方法的特点是:控制点的输入与曲线输出之间的关系明确,使设计人员比较直观地估计给定条件与设计出的曲线之间的关系。当设计人员(用户)使用交互手段改变输入控制点,就能很方便地在屏幕上改变拟合曲线的形状与代表它的多项式的次数以迎合设计要求。 Bezier曲线是指用光滑参数曲线段逼近一折线多边形,它不要求给出导数,只要给出数据点就可以构造曲线,而且曲线次数严格依赖确定该段曲线的数据点个数。 曲线的形状依赖于该多边形的形状,即由一组多边折线(该多边折线称为特征多边形)的顶点唯一地定义出来,且只有该多边形第一个顶点和最后一个顶点在曲线上。 Bezier曲线及其特征多边形如下图 Bezier曲线分为开放型和封闭型两类:首尾控制点不想同为开放型,首尾控制点想同为封闭型。如下图所示: 通常由n+1个顶点确定的曲线为n次曲线。在上述式中,Pi 是特征多边形第i个顶点的坐标(xi,yi), 是伯恩斯坦(Bernstein)多项式,称为n次Bernstein基函数,定义如下: 性质1:正性 性质4:对称性 性质1:端点及端点切线 1.Bezier曲线的起点和终点分别是特征多边形的第一个顶点和最后一个顶点。 这一性质证明如下。由伯恩撕坦多项式可以导出: 这表明二次Bezier曲线是一段抛物线,其矩阵形式为: 在上式中,可以看出: 一般的,对于n次Bezier曲线,用矩阵形式可表示为: 解: Step1:由公式 计算对应不 同 t 值下 的值,如下表所示。 Step2: 求出不同t值下P(t)的值: 根据以上这些点坐标就可画出三次Bezier曲线,具体图形如下图所示。 注:上述 的取值和个数都不唯一。 BezierCurve( ) { int x,y,n; float i,dt,t; char msg[80]; dt=1/(float)n; for(i=0;i=n;i++) { t=i*dt; x=Vertex[0].x*(1-t)*(1-t)*(1-t)+Vertex[1].x*3*t*(1-t)* (1-t)+Vertex[2].x*3*t*t*(1-t)+Vertex[3].x*t*t*t; y=Vertex[0].y*(1-t)*(1-t)*(1-t)+Vertex[1].y*3*t*(1-t)* (1-t)+Vertex[2].y*3*t*t*(1-t)+Vertex[3].y*t*t*t; if(i==0) moveto(x,y); lineto(x,y); } line(Vertex[0].x, Vertex[0].y, Vertex[1].x, Vertex[1].y); line(Vertex[1].x, Vertex[1].y, Vertex[2].x, Vertex[2].y); line(Vertex[2].x, Vertex[2].y, Vertex[3].x, Vertex[3].y); sprintf(msg,%s%d%s%d,%d%s,P,0,(,50,50,)); outtextxy(x0,y0,msg); sprintf(msg,%s%d%s%d,%d%s,P,1,(,150,150,)); outtextxy(x1,y1,msg); sprintf(msg,%s%d%s%d,%d%s,P,2,(,300,130,)); outtextxy(x2,y2,msg); sprintf(msg,%s

文档评论(0)

82393aa + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档