计算机图形学Bresenham算法.doc

计算机图形学Bresenham算法.doc

ID:59493044

大小:264.00 KB

页数:9页

时间:2020-11-03

计算机图形学Bresenham算法.doc_第1页
计算机图形学Bresenham算法.doc_第2页
计算机图形学Bresenham算法.doc_第3页
计算机图形学Bresenham算法.doc_第4页
计算机图形学Bresenham算法.doc_第5页
资源描述:

《计算机图形学Bresenham算法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、地理与生物信息学院2010/2011学年第二学期实验报告课程名称:计算机图形学实验名称:Bresenham直线扫描算法的实现班级学号B学生姓名郭超伟指导教师曹正林日期:2011年4月一、实验题目:Bresenham直线扫描算法的实现二、实验要求:学习VisualC++6.0集成编程环境的使用、图形设备接口和常用图形程序设计、鼠标编程以及菜单设计等基础知识,从而掌握利用VisualC++进行图形程序设计的方法以及简单的图形画法,并编程实现Bresenham直线扫描转换程序,得出相应的输出图形。三、实验内容:1.学习VisualC++6.0集成编成环境的使用;2

2、.掌握VisualC++6.0图形设备接口和常用图形程序设计、菜单设计等方法;3.编程实现Bresenham直线扫描转换程序,得出相应的输出图形;四、实验过程:1.算法的基本描述//假设该线段位于第一象限内且斜率大于0小于1,设起点为(x1,y1),终点为(x2,y2).//根据对称性,可推导至全象限内的线段.1.画起点(x1,y1).2.准备画下个点。x坐标增1,判断如果达到终点,则完成。否则,由图中可知,下个要画的点要么为当前点的右邻接点,要么是当前点的右上邻接点.2.1.如果线段ax+by+c=0与x=x1+1的交点的y坐标大于M点的y坐标的话,下个点

3、为U(x1+1,y1+1)2.2.否则,下个点为B(x1+1,y1)3.画点(U或者B).4.跳回第2步.5.结束图1直线实现原理这里需要细化的是怎么判断下个要画的点为当前点的右邻接点还是当前点的右上邻接点2.算法的源程序voidCBView::OnMenuline(){//TODO:AddyourcommandhandlercodehereInputDlgdlg;if(dlg.DoModal()==IDOK){x1=dlg.m_x1;y1=dlg.m_y1;x2=dlg.m_x2;y2=dlg.m_y2;}AfxGetMainWnd()->SetWindo

4、wText("Bresenham算法");RedrawWindow();Bresenham();}voidCBView::Brensenham(){CClientDCdc(this);CRectRect;//定义矩形对象GetClientRect(&Rect);//获得当前窗口的客户区大小dc.SetMapMode(MM_ANISOTROPIC);//设置MM_ANISOTROPIC映射模式dc.SetWindowExt(Rect.Width(),Rect.Height());//设置窗口范围dc.SetViewportExt(Rect.Width(),-R

5、ect.Height());//设置视区范围dc.SetViewportOrg(Rect.Width()/2,Rect.Height()/2);//设置视口原点dc.MoveTo(-Rect.Width(),0);dc.LineTo(Rect.Width(),0);dc.MoveTo(0,-Rect.Height()/2);dc.LineTo(0,Rect.Height()/2);COLORREFrgb=RGB(0,255,0);//定义直线颜色doublex,y;doubled,k;k=(y2-y1)/(x2-x1);if(0<=k&&k<=1)//直线斜

6、率[0,1]时{if(x1>x2){doubletx=x1;doublety=y1;x1=x2;y1=y2;x2=tx;y2=ty;}x=x1;y=y1;d=0.5-k;for(x=x1;x<=x2;x++){dc.SetPixel(ROUND(x),ROUND(y),rgb);if(d<0){y++;d+=1-k;}elsed-=k;}}if(k>1)//直线斜率k>1时{if(y1>y2){doubletx=x1;doublety=y1;x1=x2;y1=y2;x2=tx;y2=ty;}x=x1;y=y1;d=1-0.5*k;for(y=y1;y<=y2

7、;y++){dc.SetPixel(ROUND(x),ROUND(y),rgb);if(d>=0){x++;d+=1-k;}elsed+=1;}}if(k<-1)//直线斜率k<-1时{if(y1y2;y--){dc.SetPixel(ROUND(x),ROUND(y),rgb);if(d<0){x++;d-=1+k;}elsed-=1;}}if(-1<=k&&k<0)//直线斜率[-1,

8、0]时{if(x1>x2){doubletx=x1;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。