本科生毕业论文-贝塞尔曲线降阶逼近

上传人:飞****9 文档编号:132182707 上传时间:2020-05-13 格式:DOC 页数:20 大小:329KB
返回 下载 相关 举报
本科生毕业论文-贝塞尔曲线降阶逼近_第1页
第1页 / 共20页
本科生毕业论文-贝塞尔曲线降阶逼近_第2页
第2页 / 共20页
本科生毕业论文-贝塞尔曲线降阶逼近_第3页
第3页 / 共20页
本科生毕业论文-贝塞尔曲线降阶逼近_第4页
第4页 / 共20页
本科生毕业论文-贝塞尔曲线降阶逼近_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《本科生毕业论文-贝塞尔曲线降阶逼近》由会员分享,可在线阅读,更多相关《本科生毕业论文-贝塞尔曲线降阶逼近(20页珍藏版)》请在金锄头文库上搜索。

1、湖 南 农 业 大 学全日制普通本科生毕业论文 Bzier曲线的降阶逼近Degree reduction of Bzier curves学生姓名: 李齐放学 号: 200740204202年级专业及班级: 2007级信息与计算科学(2)班指导老师及职称: 刘凯 讲师学 院: 理学院湖南长沙提交日期: 2011 年 6 月湖南农业大学全日制普通本科生毕业论文诚 信 声 明本人郑重声明:所呈交的本科毕业论文是本人在指导老师的指导下,进行研究工作所取得的成果,成果不存在知识产权争议。除文中已经注明引用的内容外,本论文不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集

2、体在文中均作了明确的说明并表示了谢意。本人完全意识到本声明的法律结果由本人承担。 毕业论文作者签名: 2011 年 月 日 目 录摘 要1关键词11 前 言12 Bezier曲线的应用23 贝塞尔曲线拆分算法34 Bezier曲线的数学论证95 与其他算法的比较115 结 论136 结束语14参考文献14致 谢16 Bzier曲线的降阶逼近学 生:李齐放指导老师:刘 凯(湖南农业大学理学院,长沙 410128)摘 要:研究了两端点具有任意阶插值条件的Bzier曲线降多阶逼近的问题,对于给定的首末端点的各阶插值条件,给出了一种新的一次降多阶逼近算法,应用Chebyshev多项式逼近理论达到了满足

3、端点插值条件下的近似最佳一致逼近。此算法易于实现,误差计算简单,且所得降阶曲线具有很好的逼近效果,结合分割算法,可获得相当高的误差收敛速度。(五号宋体)关键词:Bzier曲线,降多阶,端点插值,逼近,分割1 前 言 计算机辅助几何设计始兴于上世纪60年代,最初始于飞机、船舶的外形放样(Lofting)工艺。在当时计算机发展的影响下,为了利用计算机更高效地进行设计,人们开始寻找研究曲线曲面的各种表示方法,其中最著名、最实用的技术当是由法国雷诺(Renault)汽车公司的工程师提出的Bezier技术和美国机械工程师教授 Coons 提出的 Coons 技术(本文只涉及 Bezier 曲线,故只讨论

4、 Bezier技术)。在大多情况下,描述产品外形的曲线只有大概形状或者只知道它所通过的一系列空间点列,这些点称为型值点,这类曲线叫自由曲线;而计算机辅助几何设计就是研究自由曲线的表示、设计、显示、分析与综合以及处理等问题。在Bezier 曲线的表示中,预先给定一批控制顶点,通过这些控制顶点生成 Bezier 曲线,其形状当然由控制顶点来控制,当然形状的改变也受这些控制顶点位置改变的影响,因此我们可以通过这些顶点的位置改变来调控曲线的形状。在工程设计和科学实验当中,我们经常要设计或描绘一些不规则的曲线,当利用计算机对这些不规则曲线进行表达、分析和研究时首要的任务就是对特定的不规则曲线要建立一个数

5、学模型去描述它,因为在计算机内部图是以二进制的形式存贮着。一般,碰到的实际问题有以下三种情况:(1)由已知的一系列准确的数据点来定义曲线,也就是说,要求曲线必须经过所有的数据点。一般,经常采用多项式插值法,例如样条方程来解决这个问题。(2)给定一些离散的数据点,这些数据点仅是某些未知真实值的近似数据。要求用一条曲线来指出这些数据点的正确趋势。这条曲线可能只通过一部分数据点,或根本不通过任何数据点。根据实验或观察所测定的近似的有时是随机的数据来画出曲线,就属这种情况。一般要用曲线拟合的方法去逼近这些数据点。(3)在工程中设计曲线轮廊时,有时先给出控制曲线的特征多边形,然后再用参数曲线去逼近它,这

6、种方法有易于控制曲线趋向的许多优点,在工程实际中用得很多。Bezier曲线方程,就是其中常见的一种方法。法国雷诺(Renault)汽车公司的工程师Bzier(1910-1999)在 1962 年提出 Bzier曲线,其表达式是其中,但是,这个表达式还比较复杂,到1972年,Forrest提出一个定义(For72), 即,其中,它恰好就是Bernstein基与控制顶点的线性组合,这才是我们今天广泛使用的Bzier 曲线。2 Bezier曲线的应用Bezier曲线是应用于二维图形应用程序的数学曲线,翻译成中文是“贝塞尔曲线”。曲线的定义有四个点:起始点、终止点(也称锚点)以及两个相互分离的中间点。

7、滑动两个中间点,贝塞尔曲线的形状会发生变化。贝塞尔曲线就是这样的一条曲线,它是依据四个位置任意的点坐标绘制出的一条光滑曲线。在历史上,研究贝塞尔曲线的人最初是按照已知曲线参数方程来确定四个点的思路设计出这种矢量曲线绘制法。贝塞尔曲线的有趣之处更在于它的“皮筋效应”,也就是说,随着点有规律地移动,曲线将产生皮筋伸引一样的变换,带来视觉上的冲击。1962年,法国数学家Pierre Bzier第一个研究了这种矢量绘制曲线的方法,并给出了详细的计算公式,因此按照这样的公式绘制出来的曲线就用他的姓氏来命名,也就是“贝塞尔曲线”。由于用计算机画图大部分时间是操作鼠标来掌握线条的路径,与手绘的感觉和效果有很

8、大的差别。即使是一位精明的画师能轻松绘出各种图形,拿到鼠标想随心所欲的画图也不是一件容易的事。这一点是计算机万万不能代替手工的工作,所以到目前为止人们只能颇感无奈。使用贝塞尔工具画图很大程度上弥补了这一缺憾。贝塞尔曲线是计算机图形图像造型的基本工具,是图形造型运用得最多的基本线条之一。它通过控制曲线上的四个点(起始点、终止点以及两个相互分离的中间点)来创造、编辑图形。其中起重要作用的是位于曲线中央的控制线。这条线是虚拟的,中间与贝塞尔曲线交叉,两端是控制端点。移动两端的端点时贝塞尔曲线改变曲线的曲率(弯曲的程度);移动中间点(也就是移动虚拟的控制线)时,贝塞尔曲线在起始点和终止点锁定的情况下做

9、均匀移动。注意,贝塞尔曲线上的所有控制点、节点均可编辑。这种“智能化”的矢量线条为艺术家提供了一种理想的图形编辑与创造的工具。“贝赛尔”工具在photoshop中叫“钢笔工具”;在CorelDraw中翻译成“贝塞尔工具”;而在Fireworks中叫“画笔”,它是用来“画线”造型的一种专业工具。用“贝塞尔”工具无论是画直线或是曲线,都非常简单,随手可得。其操作特点是通过用鼠标在面板上放置各个锚点,根据锚点的路径和描绘的先后顺序,产生直线或者是曲线的效果。我们都知道路径由一个或多个直线段或曲线段组成。锚点标记路径段的端点。在曲线段上,每个选中的锚点显示一条或两条方向线,方向线以方向点结束。方向线和

10、方向点的位置确定曲线段的大小和形状。移动这些元素将改变路径中曲线的形状。路径可以是闭合的,没有起点或终点(如圆圈),也可以是开放的,有明显的端点(如波浪线)。3 贝塞尔曲线拆分算法贝塞尔曲线的拆分是指将贝塞尔曲线分解成逼近的多边形。可以用来判断贝塞尔曲线的选中,以及显示贝塞尔曲线的旋转效果等。贝塞尔曲线的每一个顶点都有两个控制点,用于控制在该顶点两侧的曲线的弧度。所以本函数的顶点数组的记录方式是:控制点顶点控制点控制点顶点控制点。所以两个顶点之间的曲线是由两个顶点以及两个顶点之间的控制点来决定的。主函数PolyBezierToPolys【主要类型申明】typedef CArray CPtArr

11、ay;/点动态数组类型【参数说明】bezierPtsin- 贝塞尔曲线顶点和控制点数组bClosein-是否封闭的贝塞尔曲线polyPtout-拆分后的多边形点数组precisionin-拆分精度bool PolyBezierToPolys(CPtArray &bezierPts,bool bClose,CPtArray &polyPt,int precision)polyPt.RemoveAll();CPtArray apt;int i,count = bezierPts.GetSize();/从1开始,是因为第一个是控制点,如果曲线不封闭,那么第一个控制点是没有用的。/每一段贝塞尔曲线由相

12、邻的两个顶点和之间的两个控制点决定,所以频率为3(后一个顶点在下一组中还要使用)for(i=1;icount-2;i+=3)BezierToPoly(&bezierPts,apt,precision); /拆分每一段polyPt.Append(apt);/拆分完成,加入数组/如果是封闭曲线,那么需要将最后一个顶点和第一个顶点以及最后一个控制点以及第一个控制点组成一组进行拆分if(bClose)CPoint ptBuffer4;ptBuffer0 = bezierPtscount-2;ptBuffer1 = bezierPtscount-1;ptBuffer2 = bezierPts0;ptBu

13、ffer3 = bezierPts1;BezierToPoly(&ptBuffer0, apt,precision);polyPt.Append(apt);count = polyPt.GetSize();i=0;/过滤相邻的值相等的点(由于精度和误差,可能会有一些坐标值相同的相邻拆分点)while(icount-1)if(polyPt =polyPti+1)polyPt.RemoveAt(i+1);count-;continue;i+;return true;/拆分贝塞尔曲线bool InciseBezier(CPoint *pSrcPt, CPoint *pDstPt)CPoint buf

14、fer33;int i;for(i=0;i3;i+)buffer0 = pSrcPt + pSrcPti+1;buffer0.x /=2;buffer0.y /=2;for(i=0;i2;i+)buffer1 = buffer0 + buffer0i+1;buffer1.x /=2;buffer1.y /=2;buffer20 = buffer10 + buffer11;buffer20.x /=2;buffer20.y /=2;pDstPt0=pSrcPt0;pDstPt1=buffer00;pDstPt2=buffer10;pDstPt3=buffer20;pDstPt4=buffer11;pDstPt5=buffer02;pDstPt6=pSrcPt3;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号