- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- 2024-2025学年中职历史世界历史高教版(2023)教学设计合集.docx
- (高清版)B 21011-2007 矿用人车 安全要求.pdf VIP
- House M.D.《豪斯医生(2004)》第一季第一集完整中英文对照剧本.docx VIP
- 《四世同堂》读书分享.pptx VIP
- House M.D.《豪斯医生(2004)》第一季第二集完整中英文对照剧本.docx VIP
- 妇产科住院部医疗质量考核表.doc VIP
- 妇产科医疗质量考核表.pdf
- 2025北京市中考道德与法治主观题解题策略 课件.pptx
- 2015路虎发现神行线束 - 仪表板线束拆卸和安装.pdf VIP
- 冯乃超同志谈后期创造社、左联和鲁迅.pdf VIP
文档评论(0)