版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机图形学实验报告(例文) 计算机图形学实验报告 0900213 38 8 郭佩佩 实验一 建立计图实验环境 1 实验目的 为了体现面向对象的程序设计思想,本实验采用基于 visual c 十十集成环境的 mfc 编程方法,从开发 windows 应用程序的角度,来建立一个菜单交互式绘图基本环境,为后续的实验打基础。 2 实验内容 1) 建立菜单交互式绘图基本环境的工程文件 vcad,运行后如图: 2)在绘图菜单的下拉子菜单下有如下菜单项: 直线 -用弹性线方法输入直线的起止点后,调用 bresenham 算法替换原来 的 moveto/lineto 算法画直线 圆/圆弧 -在该菜单选择后,
2、可分别画圆或圆弧。 直线段裁剪 -输入矩形域左上角及右下角后,产生裁剪区域;然后可输入若干条直线段,矩形域作为主裁剪域对其裁剪之。 面区填充 -输入多边形的若干顶点后,调用面区填充算法对多边形域的内部填充 之。 贝塞尔曲线 -输入四顶点后,调用三次贝塞尔曲线生成算法生成贝塞尔曲线。 实验二 园和园弧的绘制算法 1. 实验目的 通过园和椭圆弧生成算法的上机调试,掌握: 1) vc+图形函数的使用方法; 2) 圆和椭圆弧的生成原理。 2实验内容 1)以函数形式编写圆的生成算法,然后在 vcad 绘图小系统中的绘图-圆子菜单下找到合适的程序修改点,将本实验要求你编写的画圆算法插入工程文件中,通过调试
3、来验证你编写的画圆算法的正确性。 2) 以函数形式编写角度 dda 椭圆弧生成算法,然后在 vcad 绘图小系统中的绘图-圆弧子菜单下找到合适的程序修改点,将本实验要求你编写的画圆弧算法插入工程文件中,通过调试来验证你编写的画圆弧算法的正确性。 arc(int xc,int yc,doubli r,double ts,double te) double rad,ts1,tel,deg,dte,ta,ct,st; int x,y,n,i; rad=0.0174533; tsl=ts*rad; tel=te*rad; if(r5.08) deg=0.015; else if(r7.62) deg=
4、0.06; else if(r25.4) deg=0.075; else deg=0.15; dte=deg*25.4/r; if(teltsl) tel+=6.28319; n=(int)(tel-tsl)/dte+0.5); if(n=0) n=(int)(6.28319/dte+0.5); ta=tsl; x=xc+r*cos(tsl); y=yc+r*sin(tsl); moveto(x,y); for(i=1;i=n;i+) ta+=dte; ct=cos(ta); st=sin(ta); x=xc+r*ct; y=yc+r*st; lineto(x,y); x=xc+r*cos(t
5、el); y=yc+r*sin(tel); lineto(x,y); return(0); 实验三 直线的裁剪( 编码裁剪算法) 1 实验目的 通过编码裁剪算法的设计与调试,了解二维线段的裁剪过程,提高程序设计能力与上机调试能力,达到理论与实践有机结合之目的。注:此实验已有可运行的中点裁剪算法作为参考实例,做实验时,可将中点裁剪算法替换为你编写的编码裁剪算法。 2 实验内容 1) 以函数形式编写编码裁剪算法及相关子算法; var xl,xr,yb,yt:real; procedure clip(x1,y1,x2,y2:real); label:return; type edge=(l,r,b,
6、t); outcode=set of edge; var c,c1,c2:outcode;x,y:real; procedure code(x,y:real;var c:outcode); begin c:= ; if xxl then c:=l else if xxr then c:=r; if yyb then c:=c+b else if yyt then c:=c+t; end end of code begin main code(x1,y1,c1);code(x2,y2,c2); while (c1) or (c2) do begin if c1*c2 then return;显然
7、不可见 c:=c1;if c= then c:=c2; if l in c then begin x:=xl;y:=end;对左边界求交 if r in c then begin x:=xr;y:=end; 对右边界求交 if b in c then begin x:=;y:=yb end; 对底边界求交 if t in c then begin x:=;y:=yt end; 对顶边界求交 if c=c1 then begin x1:=x;y1:=y; code(x,y,c1) end else begig x2:=x,y2:=y; code(x,y,c2) end end;end of wh
8、ile line(x1,y1,x2,y2); return: end; end of clip 2) 交互产生矩形裁剪框,并输入不同斜率的直线段的始、终点,先画出此直线段,然后调用裁剪算法,画出裁剪后保留的可见线段部分。 3) 在 vcad 绘图小系统中的绘图-直线裁剪子菜单下找到合适的修改点,将本实验要求你编写的编码裁剪算法替换掉工程文件中的中点裁剪算法,通过调试来验证你编写的编码裁剪算法的正确性。 实验四 面区填充(y-x 算法) 1 实验目的 通过 y-x 面区填充算法的调试,掌握: 1) 多边形面区填充算法的数据组织; 2) 利用相关性提高算法效率; 3) 奇异点的处理方法; 4) 提
9、高程序设计能力。 2 实验内容 1) 以函数形式编写 y-x 面区填充算法; 2) 在 vcad 绘图小系统中的绘图-面区填充子菜单下找到合适的修改点,将本实验要求你编写的面区填充算法插入工程文件中,通过调试来验证你编写的面区填充算法的正确性。操作时,用鼠标交互给出多边形的若干顶点,画出此多边形,然后调用你编写的 y-x 面区填充算法填充,以自选的颜色填充多边形。 实验五 贝塞尔曲线生成算法的设计与调试 一、实验目的 在掌握曲线、曲面数学理论的基础上,通过调试,绘制 bezier 曲线。加深同学 对数学理论的理解。通过二条 bezier 曲线的拼接设计,掌握自由曲线的拟合方法。 二、内容和要求
10、 3 1、由三次 bezier 曲线的公式:p(t)=p i b i,3 (t) 出发,编写生成 bezier i=0 曲线的程序,要求如下: a) 用鼠标输入特征多边形的四点。然后调用 bezier 曲线生成算法绘出曲线。 b) 重复上步 34 遍,验证你编写的算法的正确性。 typedef cptype float44; float cc (int n,int i) /计算 n!/(i!(n-i)!) int j; float a; a=1; for(j=i+1;j=n;j+) a*=j; for(j=2;j=n-i;j+) a/=j; return a; float b_lend(int
11、 i,int n,float t2) /计算 b i,n (t) float v; v=cc(n,i); for(j= 1;j=i;j+) v*=t2; for(j=1;j=n-i;j+) v*=(1-t2); return v; void bezier(float x0,float y0,float z0,float t0,int n,cptype cp2)/给定 t0,计算 f(t0) int i; float b1,g; for(i=0;i=n;i+) b1=b_lend(i,n,t0); x0=x0+cp2i,1*b1; y0=y0+cp2i,2*b1; z0=z0+cp2i,3*b1
12、; void draw_curv(int k,cptype cp1)/将 t 分成 k 等份,循环迭代,绘出曲线。 int i,j,x1,y1,z1; float x,y,z,delt; delt=1.0/k; t=0; for(i=1;i=k;i+) x=y=z=0; bezier(x,y,z,t,3,cp1); if(t=0) moveto(x,y); else lineto(x,y); t+=delt; 2、将特征多边形改为五个控制点,修改程序后绘出四次曲线。 3、实现二条三次 bezier 的拼接,并使连接点处保持一阶连续。 实验小结: 实验的过程是辛苦的,特别是处理大量的数据,大量的临时变量,很容易出错,需要极大的耐心。一些计算时,例如dda 算法画圆时,需要强制类型转换一些数据,因为遗漏导致程序出了许多奇怪的错误,调试很久才发现。另外,贝塞尔曲线的算法编写中,一些数学函数的调用也很复
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 下半造价师工程计价知识点缺陷责任期考试试题
- 公开课英语单词快速记忆
- 高中语文第3单元古思今赏第8课寡人之于国也课件新人教版必修
- 窗帘布艺:团队卓越之旅-项目管理能力与团队合作精进之路
- 独树一帜的中国画 课件 2024-2025学年人教版初中美术九年级上册
- 高中语文10蜀道难登高课件苏教版必修
- 2024至2030年中国控天线弹簧数据监测研究报告
- 2024至2030年中国引线式石英晶体振荡器行业投资前景及策略咨询研究报告
- 2024至2030年中国差速器十字轴行业投资前景及策略咨询研究报告
- 2024至2030年中国大小鼠灌胃针行业投资前景及策略咨询研究报告
- 2024高考物理一轮复习 第13讲 牛顿第二定律的基本应用(课件)
- 【九上沪科版数学】安徽省安庆市2023-2024学年九年级上学期期中数学试题
- 书法鉴赏 (浙江财大版)学习通超星期末考试答案章节答案2024年
- 屋面光伏发电施工方案
- 期中考试卷(试题)-2024-2025学年四年级上册数学人教版
- 师范生的教育调查报告范文(3篇)
- 期中核心素养卷(试题)-2024-2025学年数学四年级上册苏教版
- 043.中国老年心肺复苏急诊专家共识2024
- 浙江省金华市兰溪市2023-2024学年五年级上学期期中数学试卷
- 农业经理人(中级)技能认证考试复习题及答案
- 绿植花卉租摆及园林养护服务投标方案(技术方案)
评论
0/150
提交评论