




免费预览已结束,剩余4页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机图形学实验报告班级 计算机工硕班 学号 2011220456 姓名 王泽晶 实验一:直线段扫描转换实验目的通过本次试验,学生可以掌握直线段的扫描转换算法及其程序设计方法。实验内容1. 绘制20*20的网格线,格子X和Y方向间隔均为20像素,网格起始坐标在(20,20)。我们使用此网格模拟像素矩阵(),格子交叉点是像素中心。2. 输入直线段两端点,可使用以下两种方法之一:a) 对话框输入b) 鼠标在网格内以鼠标左键按下-拖动-抬起方式输入。注意:直线段两端点要自动取整到模拟的像素中心位置3. 进行直线段扫描转换,通过点击鼠标右键调用方式或者菜单调用的方式执行。计算完成后,将扫描转换结果,在模拟的像素矩阵中,使用圆形显示出来。方法一:直线的中点算法算法的主要思想:讨论斜率k1,+)上的直线段的中点算法。 对直线,左下方的端点为(x0,y0),右上方的端点为(x1,y1)。直线段的方程为: 现在假定已求得像素(),则如图得 由于直线的斜率k1,+),故m=1/k(0,1,则 在直线上,区间内存在两个像素NE和E。根据取整原则,当在中点M右方时,取像素NE,否则取像素E,即 若取,则上式变为 计算的递推公式如下: =算法的初始条件为: 相应的程序示例:public function drawLine(pixelDrawer:Function, x0:int,y0:int,x1:int,y1:int):voidvar dx:Number = x1 - x0;var dy:Number = y1 - y0;var x:Number;var y:Number;if (dx = 0) & (dy = 0) )/ 两点重合时,直接绘制重合的点pixelDrawer( x0, y0 );return;else if ( dx=0 )/ 第二点落在X轴上,直接绘制直线上的点var step:Number = dy / Math.abs(dy);for (y=y0; y!=y1; y+=step ) pixelDrawer( x0, y );else if ( dy=0 )/ 第二点落在Y轴上,直接绘制直线上的点step = dx / Math.abs(dx);for (x=x0; x!=x1; x+=step ) pixelDrawer( x, y0 );var stepX:Number = dx / Math.abs(dx);var stepY:Number = dy / Math.abs(dy);x = x0, y = y0;pixelDrawer( x, y ); / 绘制起点var k:Number = dy / dx;if ( Math.abs(k)1.0 ) / 斜率1的情形,以X为自变量递增var a:Number = -Math.abs(dy);var b:Number = Math.abs(dx);var d:Number = 2 * a + b;var d1:Number = 2 * a;var d2:Number = 2 * (a + b);while ( x!=x1 )if ( d=1的情形,以Y为自变量递增a = -Math.abs(dx);b = Math.abs(dy);d = 2 * a + b, d1 = 2 * a, d2 = 2 * (a + b);while ( y!=y1 )if ( d0 ) x += stepX; y += stepY; d += d2; else y += stepY; d += d1; pixelDrawer( x, y );pixelDrawer( x1, y1 ); / 绘制终点编译运行程序得到如下结果:方法二:直线的数值微分法算法的主要思想: 由于课本上已经给出了斜率m-1,1上的算法,故此处给出斜率m1,+上的算法,m(-,-1上的可同理推导。 已知待扫描转换的直线为(x0,y0),又,则设k=1/m=(即k(0,1)。直线方程为,即。 以一个像素为单位分割区间y0,y1,由x0x1,故y0y1,得到y0,y1上的一个划分:,. ,其中=+1,得到点列,由公式 故从直接得到。可能为浮点数,要对它取整,实际得到像素集。初值为:()=(x0,y0)。 实验内容:编写自定义的算法类,程序:public function drawLine(pixelDrawer:Function, x0:int,y0:int,x1:int,y1:int):voidvar dx:int = x1 - x0var dy:int = y1 - y0;if ( (dx = 0) & (dy = 0) )/ 两点重合时,直接绘制重合的点pixelDrawer(x0, y0 );return;else if ( dx = 0 )/ 第二点落在X轴上,直接绘制直线上的点var step:int = dy / Math.abs(dy);for ( var y:int=y0; y!=y1; y+=step ) pixelDrawer( x0, y );else if ( dy = 0 )/ 第二点落在Y轴上,直接绘制直线上的点step = dx / Math.abs(dx);for ( var x:int=x0; x!=x1; x+=step ) pixelDrawer( x, y0 );elsevar k:Number = dy / dx;if ( Math.abs(k)1 ) / 斜率=1的情形,以Y为自变量递增var x2 : Number = 0.0;var kInv:Number = 1.0 / k;x2 = x0;step = dy / Math.abs(dy);for (y=y0; y!=y1; y+=step )pixelDrawer( int(x2 + 0.5), y );x2 = x2 + kInv * step;pixelDrawer( x1, y1 ); / 绘制终点编译运行程序得到如图所示结果: 方法三:生成直线段的Bresenham算法与中点算法类似,Bresenham算法也是通过在每列像素中确定与理想直线最近的像素来进行直线扫描转换的。为了讨论方便,此处假定直线的斜率在0,1之间。对直线对直线,左下方的端点为(x0,y0),右上方的端点为(x1,y1)。如图,由到,则d=d+m,一旦d 1时,d=d-1,以保证d始终在0,1之间。初始条件为: 编写成员函数如下:public function drawLine(pixelDrawer:Function, x0:int,y0:int,x1:int,y1:int):voidvar dx:Number = x1 - x0;var dy:Number = y1 - y0;var step:Number;var x:Number;var y:Number;if ( (dx =0) & (dy =0) )/ 两点重合时,直接绘制重合的点pixelDrawer( x0, y0 );return;else if ( (dx =0) )/ 第二点落在X轴上,直接绘制直线上的点step = dy / Math.abs(dy);for (y=y0; y!=y1; y+=step ) pixelDrawer( x0, y );else if ( (dy =0) )/ 第二点落在Y轴上,直接绘制直线上的点step = dx / Math.abs(dx);for (x=x0; x!=x1; x+=step ) pixelDrawer( x, y0 );var absDX:Number = Math.abs(dx);var absDY:Number = Math.abs(dy);var stepX:Number = dx / absDX;var stepY:Number = dy / absDY;var k:Number = dy / dx;if ( Math.abs(k)1.0 ) / 斜率=0 ) y += stepY; e -= 2 * absDX;else / 斜率=1的情形,以Y为自变量递增e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人教版小升初数学试卷及答案
- 2024年河北石家庄交通投资发展集团有限责任公司招聘考试真题
- 2024年安康紫阳县发展投资集团有限公司招聘考试真题
- 甘肃省陇南市两当县2022-2023学年高三上学期期中考试语文试卷及答案
- 2024年中国石油宁夏销售分公司高校毕业生招聘真题
- 2025年麻醉、精神药品处方权授权培训试题(附答案)
- 2025年法学自荐考试试题及答案
- 2025年焊工安全操作试题及答案
- 2025年登革热防控题库试题及答案
- 2025年烟草专卖法知识试题(附答案)
- 高尔夫tpi教学课件
- 2025至2030年中国软包电池行业市场供需规模及投资前景预测报告
- 老年共病管理中国专家共识(2023)课件
- 2025年新高考2卷(新课标Ⅱ卷)语文试卷
- 外卖危害知多少
- DB31/T 968.1-2016全过程信用管理要求第1部分:数据清单编制指南
- 钢材代储协议书
- 医学决定水平核心解读
- 原始股入股协议书合同
- 2025年健康管理师职业技能考试笔试试题(100题)含答案
- 数据安全风险监测和预警管理流程
评论
0/150
提交评论