(完整word版)计算机图形学实验报告(2)_第1页
(完整word版)计算机图形学实验报告(2)_第2页
(完整word版)计算机图形学实验报告(2)_第3页
(完整word版)计算机图形学实验报告(2)_第4页
(完整word版)计算机图形学实验报告(2)_第5页
免费预览已结束,剩余11页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、姓 名: 学 号: 班 级: 实验地点: 实验时间:计算机图形学实验报告谢云飞20112497计算机科学与 技术 11-2 班逸夫楼 5072014.03实验 1 直线的生成1 实验目的和要求理解 直线 生成的原理;掌 握典型直 线生 成算 法;掌 握步处 理、分 析 实验数据的能力;编程 实现 DDA算法 、 Bresenham 中 点算 法; 对于 给定 起点和终点的 直 线, 分别调用 DDA算法 和 Bresenham 中 点算 法进 行批 量绘制,并记 录 两种 算法的绘制时间;利用 excel 等数 据分 析软 件, 将试验结果编 制成表格,并绘制折线图比较两种算法的性能。2 实验

2、环境和工具开发环 境: Visual C+ 6.0实验平 台: Experiment_Frame_One ( 自制 平台 )。本 实 验 提 供 名 为 Experiment_Frame_One 的 平 台 ,该 平 台 提 供 基 本 绘 制、设置 、输入 功能 ,学生 在此 基础 上实 现 DDA算 法和 Mid_Bresenham 算法,并进行分析。平台界面 :如 错误 ! 未找 到引用源。所 示设置 :通 过 view-setting菜 单 进 入 ,如 错 误 ! 未 找 到 引 用源。所示 输 入 : 通 过 view-input 菜 单 进 入 . 如 错 误 ! 未 找 到 引

3、 用 源。所示 实现算法:DDA算法 :void CExperiment_Frame_OneView:DDA(int X0, int Y0, int X1, int Y1)Mid_Bresenham 法 : voidCExperiment_Frame_OneView:Mid_Bresenham(int X0, int Y0, int X1, int Y1)3 实验结果3.1 程序流程图1) DDA 算 法 流 程 图 :开 始定 义 两 点 坐 标 差 dx , dy , 以 及 epsl , 计 数 k=0 , 描 绘 点 坐 标 x,y , x 增量 xIncre , y 增 量 yInc

4、re输 入 两 点 坐 标 x1,y1,x0,y0dx=x1-x0,dy=y1-y0;反之epsl=|dy|若 |dx|dy| epsl=|dx|xIncre=dx/epsl; yIncre=dy/epsl填 充 (强 制 整 形 )(x+0.5,y+0.5);横坐标x+xIncre;纵坐标y+yIncre;kx1反之x=x1;x1=x0;x0=x;x=x0;Y=y1;y1=y0;y0=y;y=y0; . 坐 标 差 dx=x1-x0;dy=y1-y0;判 断 值 d=dx-2*dy;UpIncre=2*dx-2*dy;DownIncre=-2*dy;填 充 点 (x,y) , 且 x=x+1

5、; 若 d0 反 之y=y+1, 且 d=d+UpIncre d=d+DownIncre. 若 xabs(dy) epsl=abs(dx); else epsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl;for(k=0;kX1) x=X1;X1=X0;X0=x; y=Y1;Y1=Y0;Y0=y; x=X0;y=Y0; dx=X1-X0;dy=Y1-Y0; d=dx-2*dy;UpIncre=2*dx-2*dy;DownIncre=-2*dy; while(xX1)DrawPixel(x,y);x+;i

6、f(d0)y+; d+=UpIncre;else d+=DownIncre;3.3 运行结果3.4 运行结果分析DDA 算 法 基 本 上 没 有 什 么 问 题 , Mid_Bresenham 算 法 在 网 格尺寸比较大 时误 差较 大,通过改变网格尺寸大 小即能较 为精确地 描绘出所绘直线。总之在误差允许的范围类,实验结果令人满意。4 思考题(可选)如何测试比较算法的性能?提示 1: 因为 绘制 1 条直线时间很短, 所以 需要绘制大量直线 才能比较它们之间的性能; 提 示 2: drawpixel 需 要 耗 费 时 间 ,但 它 的 时 间 性 能 和 直 线 绘 制 算法无关,因此

7、在比较不同算法性能时,应该屏蔽它的影响, 如何屏蔽?5 实验心得通过此次实验,我对典型的直线绘制算法 DDA 算法、 Bresenham 中 点算 法有了进一步的了解与 掌握 。由于第一次做图形 学的 相关 实验 , 陌生感还是有的,对平台也不太掌握,所以一开始很难入门,但在老 师的帮助和同学的相互讨论下,结果还是可观的。两个基本算法都得 以实现。希望随着学习的加深,后续的实验能够做的更好。实验 2 多边形扫描转换算法1 实验目的和要求理解多边形扫描转换的原理;掌握典型多边形扫描转换算法;掌 握 步处理、分析实验数据的能力;编 程实 现基本 X-扫描线转换算法 (必 做);编 程 实 现 有

8、效 边 表 转 换 算 法 ( 选 做 )。2 实验环境和工具本试验提供自带实验平台开发 环境: Visual C+ 6.0本 实 验 提 供 名 为 Polygon_Conversion的 平 台 , 该 平 台 提 供 基 本 绘 制 、设 置、 输入功能,学生在此基 础上 实现 X-扫描 线算 法和有效边表转换 算 法 。多边形输入:用户按【 功能】 【输入多边形 】菜单开始输入多边形 ; 单击鼠标左键输入多边形顶点; 点击鼠标右键结束多边形输入,并将最后一个顶点和第一个顶点进行连接;参数设置:用户按“【 功能 】 【设置 】”启 动设置对话框设置内容:填充色是否填充多边形选择转换算法实

9、现扫描转换算法X-扫描线转换算法:void CPolygon_ConversionView:X_Scan_Line_Conersion(int Vertices2, int VertexNum)有效边表转换算法:void CPolygon_ConversionView:Active_Edge_Table_Conersion(int Vertices2, int VertexNum)3 实验结果3.1 程序流程图X- 扫描 线转 换 算法 : 开始(若构点小于 3个结束)确定多边形所占有的最大扫描线,得到多边形顶点的最小和最大 y 值(ymin 和 ymax)从 ys=ymin 开 始 扫 描

10、, 且 计 算 每 条 边 的 方 程 式 记 录 ys 与 多 边 形 各 边 交 点(判断并取舍交点:顶点的两条边的另外两个端点的 y1,y2 的值比 ys大的个数为 0,1,2,则取 交点对 应个 数为 0,1,2;) 取完交点横坐标后排序交点横坐标 x 数组,并 配 对( 1,2)(3,4) 填充配对区间若扫描 线 ys=ymax (结束)3.2 程序代码void CPolygon_ConversionView:X_Scan_Line_Conersion(int Vertices2, int VertexNum)int ymin,ymax,x10,i,j,n=0,x1,x2,y1,y2

11、,x0,ys; ymax=0xffffffff;ymin=0x7fffffff; if(VertexNum=3) return;for(i=0;iVertexNum;+i)if(Verticesi1ymax) ymax=Verticesi1;for(ys=ymin;ys=ymax;ys+)n=0;for(j=0;jVertexNum;+j)x1=Verticesj0;y1=Verticesj1;x2=Vertices(j+1)%VertexNum0;y2=Vertices(j+1)%VertexNum1;if(y1=y2)continue ; if(ysmax(y1,y2) continue;

12、x0=int(ys-y1)*(x2-x1)/(y2-y1)+x1+0.5); if(ys=y1)continue;if(ys=y2)int tmp=0;if(y1ys) +tmp;if(Vertices(j+2)%VertexNum1ys) +tmp;if(tmp%2=0) continue;xn=x0;n+; sort(x,x+n);/ 排 序for(i=0;in;i+=2) / 填 充 for(j=xi;j= nodesk&t 1) value=(Divide(t-nodesk),(nodesk+m-1-nodesk)*BKM(t,k,m-1,no des)+Divide(nodesk+m

13、-t),(nodesk+m-nodesk+1)*BKM(t,k+1,m-1 ,nodes);return value;2)生成曲线的节点矢量: bool CFreeform_CurveView:Create_Nodes_Vector(int n,int m, int SplineType, float nodes) switch(SplineType) case 0: / 均匀 B 样条曲线/ 添加代码 for(int i=0;i=n+m;i+) nodesi=i;break; case 1: / 开放均匀 B 样条曲线/ 添加代码 int i=0;for(;im;i+)nodesi=0;for(;i=n;i+) nodesi=i-m+1;for(;i=n+3;i+) nodesi=n-m+2;break;default:return false;return true;3.3 运行结果3.4 运行结果分析这次试验

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论