网站大量收购闲置独家精品文档,联系QQ:2885784924

实验自由曲线的绘制(OpenGL版).docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验自由曲线的绘制(OpenGL版)

南昌大学实验报告 四 学生姓名: 张鑫维 学 号: 6100407234 专业班级: 计算机072 实验类型:□验证 □综合 ■设计 □创新 实验日期:2010-12-3 实验成绩: 自由曲线的绘制(OpenGL版) 1. 实验目的 1、掌握Bezier曲线的定义生成算法、离散生成算法; 2、掌握B样条曲线的定义生成算法。 2. 实验内容 假设窗口的宽高分别是600 , 600 个像素单位, 定义的裁剪窗口由函数gluOrtho2D(-50.0,50.0,-50.0,50.0)决定。 曲线控制点数据: 1、已知空间四点P0(-40.0,-40.0,0.0)、P1(-10.0,200.0,0.0)、P2(10.0,-200.0,0.0)、P3(40.0,40.0,0.0),根据Bezier曲线的定义编程绘制曲线。 2、已知空间四点P0(-40.0,-40.0,0.0)、P1(-10.0,200.0,0.0)、P2(10.0,-200.0,0.0)、P3(40.0,40.0,0.0),根据Bezier曲线的离散生成算法绘制曲线。 3、已知空间四点P0(-40.0,-40.0,0.0)、P1(-10.0,200.0,0.0)、P2(10.0,-200.0,0.0)、P3(40.0,40.0,0.0),根据B样条曲线的定义绘制曲线。 3.实验指导 由于几何外形设计的要求越来越高,传统的曲线曲面表示方法,已不能满足用户的需求。1962 年,法国雷诺汽车公司的P.E.Bezier 构造了一种以逼近为基础的参数曲线和曲面的设计方法,并用这种方法完成了一种称为UNISURF 的曲线和曲面设计系统,1972年,该系统被投入了应用。Bezier方法将函数逼近同几何表示结合起来,使得设计师在计算机上就象使用作图工具一样得心应手。 4. 实验结果 按照定义画出的Bezier曲线(101个点) 按照de Casteljau算法画出的Bezier曲线(1001个点) 三次Bezier曲线的自由生成 确定三次B样条曲线的控制点 所有控制点确定后画出B样条曲线 拖拽第四个控制点,调整曲线 5. 实验心得 这个实验考查的是自由曲线的绘制,要求熟练掌握好Bezier曲线和B样条曲线的原理和 编程。我首先按照实验要求,完成了对已知四个控制点的Bezier曲线生成,采用了定义和de Casteljau两种算法编程。在掌握好Bezier曲线的两种算法后,我尝试着扩展实验,利用鼠标响应函数mouse(),选取用户左击鼠标确定的控制点,在取得了四个控制点后,打印出四个控制点、控制多边形线段以及生成的Bezier曲线。这样可以通过鼠标点击,自由绘制三次Bezier曲线了。 B样条曲线的关键是deBoor算法。我之前按照书上的编写了程序,结果四个控制点只打出一个点,而不见曲线。后来老师说书上的有问题,我又参考了他给的资料后才正确完成了程序。后来,我又进一步完善了程序。先是让程序能从鼠标接收任意多个控制点,按照控制点的个数动态算出对应的开放节点矢量,接着调用deBoor算法,算出每段曲线上的点的坐标。随后,我又将橡皮筋技术应用到了该程序,让程序在绘制了曲线后能通过鼠标左键的拖拽控制点实现B样条曲线的调整,进一步提高了程序的可用性。 通过这个实验,我不仅深入了解了自由曲线绘制的算法,还熟练了OpenGL编程。特别是鼠标响应函数的处理,让我收获颇大,对交互式的OpenGL编程能力有了很大的提高。 6. 程序源码 float deboor(int degree,float coeff[],float knot[],float u,int i) { //deboor算法 int k,j; float t1,t2,coeffa[30]; for(j=i-degree; j=i; j++) coeffa[j]=coeff[j]; for(k=1; k=degree; k++){ for(j=i; j=i-degree+k; j--){ t1=(float)(knot[j+degree-k+1]-u)/(knot[j+degree-k+1]-knot[j]); t2=1.0-t1; coeffa[j]=t1*coeffa[j-1]+t2*coeffa[j];}} return coeffa[i];} void bspToPoints(int degree,int L,float coeff[],float knot[],int dense,float points[],int pointNum) { //控制点生成曲线点坐标 i

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档