版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 函数的奇偶性的说课稿
- 上市公司员工购房合同范本
- 转口贸易合同中运输条款
- 办公大楼浮雕施工合同
- 物业公司财务内控手册
- 城市公园绿化招投标报名表
- 活动摄像租赁简易合同
- 餐饮KTV音响系统设备协议
- 航运服务招投标专用合同条款
- 体育馆消防工程合同
- 意识形态知识培训课
- 个人开车与单位免责协议书
- 四川公务员考试(公共基础知识)真题试卷汇编1
- 《护理文书书写》课件
- 广东省广州市海珠区2024-2025学年三年级上学期月考英语试卷
- 2023年北京市重点校初三(上)期末历史试题汇编:第一次工业革命
- 《最后一片叶子》课件
- 2024年小轿车买卖合同标准版本(三篇)
- 八年级生物中考备考计划
- 2024-2030年全球及中国湿巾和卫生纸行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 公务员2019年国考《申论》真题及答案(省级)
评论
0/150
提交评论