欢迎来到天天文库
浏览记录
ID:57686679
大小:167.50 KB
页数:4页
时间:2020-09-01
《Bresenham算法Bresenham算法及具体程序实现.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数学与软件科学学院实验报告学期:2010至2011第一学期2010年9月25日课程名称:计算机图形学专业:信息与计算科学2007级5班实验编号:02实验项目:Bresenham算法指导教师庞朝阳姓名:学号:实验成绩:一、实验目的及要求1)理解直线的生成算法;2)掌握直线生成算法——Bresenham算法,并用C++程序实现;二、实验内容1)实现Bresenham算法;2)与DDA算法对比(各运行20万次),分析哪种算法较快;3)分析该算法比DDA快的原因。三、主要仪器设备及软件环境1)计算机;2)Vc++6.0。四、具体实验内容:1.基本
2、原理借助于一个误差量(表征直线与当前实际绘制像素点的距离)来确认下一个像素点的位置,另外该算法的巧妙之处在于利用增量计算,只需检查误差量的符号,就可以确认下一列的像素位置。2.误差量的计算(针对斜率k在0到1之间)由图可知:那么设,则,代入上式得:其中,c是常量,,与像素位置无关。令,则的计算仅包括整数运算,它的符号与的符号相同(因为>0):① 当<0时,直线上理想位置与右方像素更接近,取右方像素;② 当>0时,取右上方像素;③ 当=0时,约定取。计算k,k+1步误差参数:两式相减得:(参数c消去),另,则若选择右上方像素(),即,则若选
3、择右方像素(<0),即,则由及,得3.算法优点该算法避免了DDA算法中费时的取整运算4.程序代码(针对斜率k在0到1之间)#include#include"math.h"#defineTRUE1usingnamespacestd;classBresenham{public:voidBresenham_Line(intx0,inty0,intx1,inty1,COLORREFcolor,CDC*pDC){intdx,dy,e,i,x,y;dx=x1-x0;dy=y1-y0;e=2*dy-dx;x=x0;y=y0;intc
4、=2*(dy-dx);intv=2*dy;for(i=0;i<=dx;i++){pDC->SetPixel(x,y,color);x++;if(e>=0){y++;e=e+c;}else{e=e+v;}}}}5.程序结果:5.当k>1时,y总是增1,再用Bresenham误差量判别式可确定x变量是否增1,那上述程序只需变换x和y左边即可实现;当K<0时,考虑x,y递减1。
此文档下载收益归作者所有