完整版计算机图形学试验报告文档良心出品
院系 数学与统计学学院 专业 信息与计算科学专业 年级 2013 级 课程名称计算机图形学 组号第 35 组 组员 李铮 秦文志 李丹 指导教师 2016 年 06 月 05 日 年级 专业 实验时间 实验 名称 2013 级 信息与计算 科学专业 学号 姓名 201321101027 李铮 实验地点 实验 类型 设计型 201321101028 秦文志 201321101029 李丹 9 栋 204 综合型 √ 创新型 2016 年 4 月 26 日 实验一、 直线的扫描转换 实 验 目 的 1)理解在显示器上画图与在纸上画图的本质区别; 2)掌握直线的光栅扫描转换过程; 3)掌握不同算法绘制直线的思路和优缺点。 用基本增量算法和 Bresenham 算法画直线 1)将像素网格表现出来,建立网格坐标系; 2)显示判别式的计算过程和下一点的选择策略; 3)记录生成点的坐标,建议用表的形式; 4)图形生成过程可以重复进行。 DDA 代码 clear close all clc 实 验 要 求 x10;y10; x215;y212; 实 验 原 理 figure,line[x1,x2],[y1,y2],Color,[0 0 1]; length absx2-x11; dxx2-x1/length; dyy2-y1/length; kdy/dx; xx1; yy1; hold on for i1length plotroundx,floory0.5,*r xx1; yyk; end hold off Bresenham 代码 clear close all clc x10;y10; x215;y212; figure,line[x1,x2],[y1,y2],Color,[0 0 1]; length absx2-x11; dxx2-x1; dyy2-y1; e2*dy-dx; xx1; yy1; hold on for i1length plotroundx,floory0.5,*r ife0 yy1; ee-2*dx; end xx1; ee2*dy; end hold off 实 验 结 果 分 析 Bresenham 法 实 验 心 得 体 会 成 绩 评 定教师签名 年月日 年级 专业 实验时间 实验 名称 实 验 目 的 2013 级 信息与计算 科学专业 学号 姓名 201321101027 李铮 实验地点 实验 类型 设计型 201321101028 秦文志 201321101029 李丹 9 栋 204 综合型 √ 创新型 2016 年 5 月 3 日 实验二、 圆弧的扫描转换 1)掌握圆和圆弧的光栅扫描转换过程; 2)掌握不同算法绘制圆弧的技巧和优缺点。 用正负法和 Bresenham 算法画圆弧 1)将像素网格表现出来,建立网格坐标系; 2)显示判别式的计算过程和下一点的选择策略; 3)记录生成点的坐标,建议用表的形式; 4)图形生成过程可以重复进行。 Bresenham 算法 function bresenhamb x 0; y b; d3-2*b; theta00.01*pi2*pi; x1b*costheta0; y1b*sintheta0; plotx1,y1; hold on plot0,0,b; hold on; while x0 ff-2*y1; yy-1; else ff2*x1; xx1; end ify0 plotx,y,*; plot-x,-y,*; plot-x,y,*; plotx,-y,*; end end hold off; Bresenham 算法 实 验 结 果 分 析 正负法 实 验 心 得 体 会 成 绩 评 定教师签名 年月日 年级 专业 实验时间 实验 名称 2013 级 信息与计算 科学专业 学号 姓名 201321101027 李铮 实验地点 实验 类型 201321101028 秦文志 9 栋 204 设计型综合型 √ 创新型 201321101029 李丹 2016 年 5 月 17 日 实验三、 直线段的裁剪 实 验 目 的 用 Cohen-SutherLand算法和 liang _barsky 算法进行线段裁剪 1)理解裁剪的相关概念 2)掌握直线段的一般裁剪过程; 3)理解并掌握 Cohen-SutherLand 算法的编码思想; 4)理解并掌握 Liang_Barsky算法的参数化裁剪思想; 实 验 要 求 1)将像素网格表现出来,建立网格坐标系; 2)交互输入剪裁线段和裁剪窗口; 3)对于线段裁剪,线段被窗口的四条边裁剪的过程要显示出来; 4)裁剪过程可以重复进行。 实 验 原 理 Cohen-SutherLand 算法核心代码 function LinesCohen_Sutherlandline,Rectangle 编码裁剪算法 line 为线段端点矩阵,共四列,其数据含义如下 端点 A x坐标端点 A y坐标端点 B x 坐标端点 B y 坐标 Rectangle 为窗口边界值,共四个元素,其含义分别为Xwl,Xwr,Ywb,Ywt。 首先检测参数是否合法 [row column]sizeline; if column0,1 Lines[Lines;[P1,P2]]; finishedtrue; end 若当前线段处理完成,则退出 if finished break; end 判断是否简弃 testcode1, if isemptyfindtest0, 1 finishedtrue; end if finished break; end 确保 P1 在窗口之外 if isemptyfindcode1,0,1 交换 P1,P2 的坐标值和编码 PTP1;P1P2;P2PT; PTcode1,;code1,code2,;code2,PT; end 从低位开始找编码值为 1 的地方 Dfindcode1,0,1; if D0,1; else 若线段是斜线,则计算 y 值,x 值变为窗口的左边界或右边界 P1[RectangleD,P12k*RectangleD-P11]; end else 此时 P1 位于窗口的上方或下方 if kinf 若线段是竖直线,则 x 不变,y 变为窗口的上边界或下边界 且此时 k 不会等于 0,否则线段将处于简弃状态。 P12RectangleD; else 若线段是斜线,则计算 x 值,y 值变为窗口的上边界或下边界。 P1[P11RectangleD-P12/k,RectangleD]; end e