




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验二 直线的生成算法的实现班级 08信计2班 学号 59 姓名 分数 一、实验目的和要求1.理解直线生成的基本原理。2.掌握几种常用的直线生成算法。3.利用Visual C+实现直线生成的DDA算法。二、实验内容1.了解直线的生成原理,尤其是Bresenham画线法原理。2.掌握几种基本的直线生成算法:DDA画线法、Bresenham画线法、中点画线法。3.利用Visual C+实现直线生成的DDA算法,在屏幕上任意生成一条直线。三、实验步骤1.直线的生成原理:(1)DDA画线法也称数值微分法,是一种增量算法。是一种基于直线的微分方程来生成直线的方法。(2)中点画线法原理以下均假定所画直线的斜率,如果在方向上的增量为1,则方向上的增量只能在之间。中点画线法的基本原理是:假设在坐标为的各像素点中,与直线最近者已经确定为,用小实心圆表示。那么,下一个与直线最近的像素只能是正右方的,或右上方的,用小空心圆表示。以为和的中点,则的坐标为。又假设是理想直线与垂直线的交点。显然,若在的下方,则离直线近,应取为下一像素点;若在的上方,则离直线近,应取为下一像素点。(3)Bresenham画线法原理直线的中点Bresenham算法的原理:每次在主位移方向上走一步,另一个方向上走不走步取决于中点偏差判别式的值。给定理想直线的起点坐标为P0(x0,y0),终点坐标为P1(x1,y1),则直线的隐函数方程为: (3-1) 构造中点偏差判别式d。 (1) 当d0时 当d0时 2.实现前面所述的各种直线生成算法,包括DDA算法、中点生成算法、Bresenham生成算法等。程序运行后的菜单界面如图2-1所示。图2-1 直线生成图形的程序运行界面首先创建工程名为“基本图形的生成与填充”的单文档应用程序框架,操作步骤如下:(1)创建单文档应用程序框架。启动Visual C+,选择“文件/新建”菜单命令,在弹出的新建对话框中单击“工程”标签;选择.MFC AppWizard(exe),在“工程名称”编辑框中输入“基本图形的生成与填充”(也可以使用英文名称),选择所要存放的位置后,单击“确定”按钮,出现Stept1对话框;选择“单个文档”选项,单击“下一步”按钮,在接着的Stept2Stept5中,均可以直接单击“下一步”按钮完成应用程序框架的构建。也可以在Stept1步选择“单文档”(Single document)后,直接单击“完成”按钮完成。(2)编辑菜单资源。在工作区中的Resource View标签中,单击Menu项左边的“+”,然后双击其子项IDRMAINFRAME,弹出编辑主菜单项,根据表1中定义的菜单项资源来编辑菜单,如图2-2所示。图2-2 编辑主菜单项(3)添加消息处理函数。利用类向导(Class Wizard)为应用程序添加与菜单项相关的消息处理函数。右击菜单项标题,选择“建立类向导”,在弹出的MFC ClassWizard窗口中,选择Message Maps标签,在Class Name栏中选择CMyView,根据表2建立消息映射函数,如图2-3所示。MFC ClassWizard会自动完成有关的函数声明。图2-3 添加消息处理函数(4)添加程序代码。在CMyView.cpp文件中相应的位置添加各算法的程序代码,在Visual C+的MFC中绘制图形,一般可以调用一个“CDC”类,从CDC开始,添加代码。添加代码如下:/DDA算法生成直线,起点(x0,y0),终点(x1,y1)。void CMyView:OnDdaline() CDC *pDC=GetDC(); int x0=100,y0=100,x1=300,y1=200,c=RGB(255,0,0);int x,y,i;float dx,dy,k;dx=(float)(x1-x0);dy=(float)(y1-y0);k=dy/dx;x=x0;y=y0;if(abs(k)1)for(;ySetPixel(x,int(y+0.5),c);y=y+k;if(abs(k)=1)for(;ySetPixel(int(x+0.5),y,c);x=x+1/k;ReleaseDC(pDC);/中点算法生成直线void CMyView:OnMidpointline() CDC *pDC=GetDC();int x0=100,y0=100,x1=400,y1=300,c=RGB(0,0,0);float a,b,d1,d2,d,x,y;a=y0-y1;b=x1-x0;d=2*a+b;d1=2*a;d2=2*(a=b);x=x0;y=y0;pDC-SetPixel(x,y,c);while(xx1)if(dSetPixel(x,y,c);ReleaseDC(pDC);/Bresenham算法生成直线void CMyView:OnBresenhamline() CDC *pDC=GetDC();int x0=100,y0=100,x1=500,y1=600,color=RGB(0,0,255);int i,x,y,dx,dy;float k,e;dx=x1-x0;dy=y1-y0;e=-dx;x=x0;y=y0;for(i=0;iSetPixel(x,y,color);x+;e+=2*dy;if(e=0) y+;e=e-2*dx;ReleaseDC(pDC);(5)编译连接生成可执行程序,运行该程序。仔细检查上述各个操作步骤,核对以上信息,点击调试按钮,调试程序准确无误后即可完整运行该程序。四、实验结果分析运行该程序后,运行程序后,我们可以得到如图2-1的界面,分别单击菜单中的“直线生成”项的“DDA算法生成直线”、“中点算法生成直线”、“Bresenham算法生成直线”,可以得到相应的直线:DDA算法得到的是红色线段,中点生成算法得到的是黑色
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 口腔医学技术试题
- 家校协同育人机制考试题
- 安全考试题之危化品篇
- 林业生态旅游生态移民创新创业项目商业计划书
- 家政人员在线职业测评系统创新创业项目商业计划书
- 森林户外瑜伽创新创业项目商业计划书
- 建筑施工安全管理咨询服务创新创业项目商业计划书
- 无公害蔬菜社区花园创新创业项目商业计划书
- 旧车购买合同(标准版)
- 2025居民房屋的租赁合同范本
- 肾切除护理课件
- DB42T 1342-2018 小型沼气工程设计、施工及验收规范
- 湖南省2025年普通高等学校对口招生考试种植类专业综合知识试题
- 网约车考试全国公共科目考题及答案
- 银行支行安全防范教育培训制度
- JG/T 368-2012钢筋桁架楼承板
- 康复辅助技术咨询师理论考试复习题库(含答案)
- 肠痈护理常规
- DB32-T 5119-2025 锂离子电池工厂生产安全技术规范
- 利用沼液养殖微藻研究进展
- 2024从“小众运动”到“全民热潮”解码网球人群与市场机遇
评论
0/150
提交评论