计算机图形学划线实验报告

(17页)

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

14.9 积分

《计算机形学》实验报告实验一直线、圆(弧)生成算法一、 实验目的及要求1. 了解光栅图形显示器的工作原理和特点;2. 学习C/VC环境T的基本绘图方法;3. 实践与巩固直线的基本生成算法。4. 掌握直线扫描转换算法的原理及实现;5. 学习圆(弧)的基本生成算法;6. 实践圆(弧)的基本生成算法;7. 掌握圆弧扫描转换算法的原理及实现;二、 理论基础1、有关直线生成算法有DDA (数值微分)、屮点画线线算法、Bresenham生成算法 数值微分法先算出直线的斜率,然后从起点开始,确定最佳逼近于直线的y坐标。假设起点的坐标为整数。让x递增1, y相应递增k。 中点划线算法中若直线在x方向增加一个单位,y的增量只能在0、1之间。假设当前像素点已经确定,下一像素点就只可能有两种情况,将这两点的中点带入直线方程中,通过中点在直线的上、下方来判断下 一点的坐标。Bresenham算法是通过各行、各列像素中心构造一组虚拟网络格线, 按直线从起点到中点的顺序计算直线与各垂直网格线的交点,然后确定 该列像素屮与此交点最近的像素。2、有关画岡的算法圆的扫描转换(中点画圆法)、Bresenham画圆算法 圆的扫描转换算法同中点画线类似,将圆分为8份,先讨论圆的第一象限上半部分,从(0, R)点顺时针确定最佳逼近于该圆弧的像素序 列。之后通过对称画出全部圆。Bresenham画圆算法考虑圆在第一象限上的点,每确定一像素,则 下一?像素有三种可能,通过判断右下方的像素与圆的位置关系再分为三 种情况,之后通过这三个点与圆的距离远近确定最佳逼近像素。三、算法设计与分析1、数值微分法int x0=0,y0=0,xl=800,y 1=400; //数值微分法,|k|<=lfloat dx,dy,k,x,y;dx=xl-x0;dy=y 1 -yO; k=dy/dx;y=yO;for(x=xO;x<=x 1 ;x++)pDC->SetPixel(x,int(y+0.5),color); y=y+k;}该程序中每一步的x、y值是用前一步的值加上一个增量来获得的。 在程序中y与k必须用浮点数表示,每一步都必须对y进行取整。此程 序只能用于计算|k|<=l的情形,当直线的斜率的绝对值超过1是,必须 把x、y的地位进行交换,y每增加一,x相应增加1/k.2中点凼线法COLORREF color=RGB( 100,25,108);intx0=0,y0=0,xl二800,yl=400; //中点画线法,0SetPixel(x,y,255);x=x+l;e=e+k;y=y+i;e=e-1;}}该程序原本要通过直线与网格交点与0.5之间的关系来判断下一像 素点是取右方还是右上方(以斜率大与一为例),改进后的程序用 e=d-0..5的正负判断下一像素点的取值。当e大于0即对应d>0.5的情况, 给e减去1以保证在d始终在0、1之间。在画其他斜率时只需根据实 际情况对该程序做一定的改动。详细见源代码中4、中点凼圆法COLORREF color=RGB(100,25,108); int x,y,r=200;float d;x=0;y=r;d=l-r; pDC->SetPixel(x,y,color); while(xSetPixel(x+200,y+200,color); pDC->SetPixel(x+200,-y+200,color); pDC->SetPixel(-x+200,-y+200,color);pDC->SetPixel(-x+200,y+200,color); pDC->SetPixel(y+200,x+200,color); pDC->SetPixel(y+200SetPixel(-y+200,x+200,color);}在画圆时用巾点画圆法画出1/8圆,在描点时进行八次对称得到整 个的图形。5、Bresenham画圆算法int r=200;int x,y,d,dl,d2,dir; x=O;y=r;d=2*(l-r);while(y〉=O){pDC-〉SetPixel(x+200,y+200,100); pDC-〉SetPixel(x+200,-y+200,100); pDC-〉SetPixel(-x+200,y+200,100); pDC-〉SetPixel(-x+200,-y+200,100);if(d<0){dl=2*(d+y)-l;if(dl<=0)dir二 1;elsedir=2;}d2=2*(d-x)-l;if(d2<=0)dir=2;elsedir=3;}else{dir=2;}switch(dir){case 1 : x++;d+=2*x+l;break;case 2 : x++;y-;d+=2*(x-y+l);break;case 3 : y--;d+=(-2*y+l);在画圆时用Bresenham圆法画出1/4圆,在描点时进行八次对称得 到整个的图形。、程序调试及结果的分析由于凼图中不能像以前的C语言一样自己输入起点和终点,于是我将直线斜率的五中情况放在一个程序中,直接赋上多组初值以实现不 同斜率的直线,所有的结果都画出來了,但是直线在水平、笔直时完全 没有一点锯齿出现,在其他斜率时会产生小鋸齿,这在绘成的圆中看的 较为明显。这些都是由于像素点的选取所产生的误差,但这都是不可避 免的。五、实验心得及建议第一次做计算机图形学实验,直线的生成是图形学中最基本也是最 常见的图形生成,其原理与实现方法直接关系到其他复杂图形生成的效 率,在之前上课中学习了直线的生成算法,并对其进行了改进。我选用 的数值微分法和中点iffli线法进行实验,斜率在o和1之间的直线都很容 易绘制,而在其他的斜率就要通过改变程序中的部分来实现。像数值微 分方法在绘制斜率大于1的图形时就必须将原来程序上的x,y的地位交 换,y每增加1,x相应增加1/k。在刚开始我将屮点画线法和数值微分 法放在同一程序中,中点画线法定义的整型变量x,y,而数值微分法需 要的是浮点型的变量,之前没有注意到这一点导致数值微分法的直线画 不出来,在自习检查之后才发现这一错误。之后再用Bresenham画线法 M线的过程屮我解决了一些课堂遗留问题,对M线方法的认识更加深刻 了。另外,在画圆的过程中,我用中点画线法进行,花了 1/8的圆通过 对称得到整圆。起初将圆心选在(0,0)点,一直出现的是1/4圆,我没 有意识到对话框里显示的只是第一象限的点,一直以为绘图方法出现了问题。之后我将圆心移到点(200,200)得到了整个圆。第一次的实验相 对比较简单,在以后的实验中要吸取教训,不犯同样的错误。姓名院系班级学号实验II期指导教师实验成缋 关 键 词: 计算机 图形学 划线 实验 报告

 天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

计算机图形学中划线的程序,计算机图形学划线实验报告相关推荐

  1. 中职计算机专业课题,《中职计算机教学中激励机制的研究》课题开题报告

    <中职计算机教学中激励机制的研究>课题开题报告 江苏省海门中等专业学校主持人:宣露露 一. 课题研究的意义 "十一五"期间,我国把发展职业教育纳入国民经济和社会发展的规 ...

  2. 我要大学答案-大学生都在用的小程序 课后习题答案|实验报告|考研资料|期末真题~

    我要大学答案-大学生都在用的小程序 课后习题答案|实验报告|考研资料|期末真题~ 小程序信息 分类:教育学习.信息查询 所属平台:微信 体验方式 使用手机微信APP扫描页面上方二维码体验: 在手机微信 ...

  3. c语言程序运行环境实验报告,程序的运行环境实验报告.doc

    程序的运行环境实验报告.doc 院:数学与计算机学院学 院:数学与计算机学院 学 姓 学 专 班 <C语言程序设计> 课程实验报告(第1次) 名: 号: 业:软件工程 同组人: 实验地点: ...

  4. 计算机策略中封运行程序,使用组策略封禁IP地址的方法

    在Windows服务器或电脑受到某个IP大量发包攻击时,系统会变得很慢.上网慢,引发一系列的问题,当查到攻击来源IP后,可以通过组策略直接封禁IP.本文以当前Windows系统受到了来自 10.89. ...

  5. 计算机导论中的名词解释,计算机导论期末考试试题及答案

    计算机导论期末考试试题及答案 一.选择题(15小题,每小题2分,共计30分) 1.用一个字节表示无符号整数,其最大值是十进制数( ). A. 256 B. 255 C. 127 D. 128 2. 一 ...

  6. 防火墙技术在计算机网络安全中的应用分析,计算机网络安全中防火墙技术的应用分析...

    计算机网络安全中防火墙技术的应用分析 张忠霜 湛江科技学院 524000 摘要:在我国计算机技术不断发展和进步的现阶段,这项技术已经广泛应用于各行各业的建设中,为我国居民的生活和工作提供了更多的便利, ...

  7. mod在计算机导论中是什么意思,计算机导论ppt课件

    <计算机导论ppt课件>由会员分享,可在线阅读,更多相关<计算机导论ppt课件(66页珍藏版)>请在人人文库网上搜索. 1.第2章 计算机基础知识,2.1 计算机的运算基础 2 ...

  8. 计算机导论中复位什么意思,计算机导论期末复习资料

    一.选择题 1. 第一台计算机ENIAC淡生于1946年,是电子管计算机:第二代是晶体管计算机:第三代是中小规模集成电路:第四代是大规模 2. 计算机的应用领域主要有:科学计算:信息管理:实时控制:办 ...

  9. 万用表在计算机检测中的应用,浅析计算机在智能仪器仪表中的应用

    随着计算机技术的发展,自动测量技术有了进一步的发展,许多以微处理器或微计算机为主体的测试用仪器仪表也相继出现,并且在人们的生产生活中得到广泛应用.智能仪器仪表,简单地讲就是将微处理器或微计算机用于测量 ...

  10. Springboot计算机等级考试在线答题小程序 计算机毕设源码68573

    摘 要 计算机等级考试在线答题小程序主要功能模块包括用户管理.考试动态.考试须知.在线考试.用户反馈等,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架 ...

最新文章

  1. html导入错误 wordpress,纯代码为WordPress压缩前端html代码 附BUG修复
  2. 最新 Xilinx vivado IP许可申请
  3. SpringBoot_配置-@PropertySource、@ImportResource、@Bean
  4. Spread表格组件For JAVA功能介绍—表格相关操作
  5. golang执行多个linux命令,golang执行系统command
  6. android httpget 参数,安卓通过httpget传入json参数,请求数据
  7. 深度学习2.0-38.RNN实战-情感分类实战
  8. C++新标准——C++1x
  9. SpringBoot + Kafka + ELK 完成海量日志收集(超详细)
  10. 监听套接字是非阻塞的,accept()返回的连接套接字是否也是阻塞的?
  11. Java新手小白入门篇 Java面向对象(一)
  12. 教你如何拔取百度地图POI兴趣点
  13. Android蓝牙打印服务,Android 模拟蓝牙打印机
  14. javascript数据类型,对象,继承及原型链
  15. 在成长的路上,我们必须与自己坦诚相见
  16. 敲可爱的手绘风可视化库——cutecharts
  17. 广西大学c语言期末试题,2006广西大学c课程考试试卷_答案.pdf
  18. 配置及执行spark、hadoop遇到的几个报错解决
  19. 换个cpu风扇可以解决很多问题
  20. ORACLE EXPDP ORA-31626 问题

热门文章

  1. statusStrip用法
  2. python基础教程四级查数据_四六级成绩还可以这样查?Python助你装B一步到位!!!...
  3. 工控ARM板登陆、wifi连接
  4. 一个人是否靠谱,闭环很重要(有深度)
  5. 0-12V的模拟量隔离模块的一些感悟
  6. mysql otl变量绑定_OTL翻译(5) -- otl_stream流相关绑定变量
  7. eNSP基础实验交换机连接路由器(二层交换机和三层交换机)
  8. ATmega16 单片机 AVR单片机 自动计价电子秤
  9. 江南大学 超级计算机,基于分布式并行计算的高性能演化算法研究
  10. 终端测试是硬件测试还是软件测试,移动终端软件测试基础知识