计算机图形学直线画法实验报告.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
西北农林科技大学实验报告 学院名称:理学院 专业年级: 课 程:计算机图形学 报告日期:2013年11月30日 十二周 1.实验目的: (1)熟练掌握基本图形元素生成算法。 (2)对高级语言的图形模式的设定有比较详细的了解。 (3)对基本图形类(或函数)的调用方法有一个比较详细的了解。 2.实验要求: 该学生自己选定一种基本图形(直线段),编写生成该基本图形的源程序,并能在计算机上编译运行,画出正确的图形。 3.实验步骤: (1)DDA算法、Bresenham算法进行比较,选定比较合适的算法。 (2)画出程序流程图; (3)编写程序的源程序; (4)编辑源程序并进行调试; (5)进行特殊模式的运行测试,并结合情况进行调整。 (6)打印源程序或把源程序以文件的形式提交 4.实验内容: (1)DDA算法、Bresenham算法进行比较,选定比较合适的算法。 选择Bresenham算法 理由:DDA算法是一个增量算法,直观、易实现,但是x,y,k必须用浮点数表示,且每一步运算都需对x,y进行舍入取整,使得它不利于硬件的实现。Bresenham算法则没有这个缺陷。 直线(在显示器上显示为线段):记两端点为P0(x0,y0),P1(x1,y1) 用函数表示F(x,y)=y-kx-b,k=(y1-y0)/(x1-x0);(先讨论0=k=1,此时x方向是最大 位移方向) A.点与直线有三种关系: F(x,y)=0,点在直线上; F(x,y)0,点在直线上方; F(x,y)0,点在直线下方; x(i+1)=xi+1 判别式:d(xm,ym)=F(xi+1,yi+0.5)=0.5-k 递推:1.d0 取pu(xi+1,yi+1),d(i+1)=F(x+2,y+1.5)=d+1-k 2.d=0 取pd(xi+1,yi) ,d(i+m)=F(xi+2,yi+0.5)=d-k 算法步骤:(0=k=1)(k1) 1、输入直线段端点坐标P0(x0,y0),P1(x1,y1) 2、计算初始值 *x=x1-x0,*y=y1-y2,d=0.5-k(d=1-0.5k),x=x0,y=y0; 3.绘制(x,y) 4.判断d的大小,若d0,x,y更新为(x+1 ,y+1)(x,y+1),d更新为d+1-k(d+1);若 d=0, x,y更新为(x+1 ,y)(x+1,y+1),d更新为d-k ( d+1-k) 5.直线未画完重复3,4,否则结束。 (2)画出程序流程图; 5 实验源程序: function bresen() x0=input(请输入始点坐标的横坐标x0); y0=input(请输入始点坐标的纵坐标y0); x1=input(请输入终点点坐标的横坐标x1); y1=input(请输入终点坐标的纵坐标y1); dx=x1-x0; dy=y1-y0; x=x0; y=y0; if (dy/dx=0 dy/dx=1) e=-dx; while(x=x1) plot(x,y,.,markersize,1) hold all x=x+1;e=e+2*dy; if(e0) y=y+1; e=e-2*dx; end end end if (dy/dx1) e=-dy; while(y=y1) plot(x,y,.,markersize,1) hold all e=e+2*dx; y=y+1; if(e=0) x=x+1; e=e-2*dx; else e=e-2*dx; end end end xlim([0 800]); ylim([0 800]); grid 示例(0,0)-(5,8) (0,0)-(400,500) 第 1 页 共 4 页

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档