Bresenham算法画直线Word下载.docx
- 文档编号:18506783
- 上传时间:2022-12-18
- 格式:DOCX
- 页数:8
- 大小:133.26KB
Bresenham算法画直线Word下载.docx
《Bresenham算法画直线Word下载.docx》由会员分享,可在线阅读,更多相关《Bresenham算法画直线Word下载.docx(8页珍藏版)》请在冰豆网上搜索。
d1=y-yi=m(xi+1)+b-yi(1-8)
d2=(yi+1)-y=(yi+1)-m(xi+1)-b(1-9)
这两个距离差是
d1-d2=2m(xi+1)-2yi+2b-1(1-10)
我们来分析公式(1-10):
(1)当此值为正时,d1>
d2,说明直线上理论点离(xi+1,yi+1)象素较近,下一个象素点应取(xi+1,yi+1)。
(2)当此值为负时,d1<
d2,说明直线上理论点离(xi+1,yi)象素较近,则下一个象素点应取(xi+1,yi)。
(3)当此值为零时,说明直线上理论点离上、下两个象素点的距离相等,取哪个点都行,假设算法规定这种情况下取(xi+1,yi+1)作为下一个象素点。
因此只要利用(d1-d2)的符号就可以决定下一个象素点的选择。
为此,我们进一步定义一个新的判别式:
pi=△x×
(d1-d2)=2△y·
xi-2△x·
yi+c(1-11)
式(1-11)中的△x=(x2-x1)>
0,因此pi与(d1-d2)有相同的符号;
这里△y=y2-y1,m=△y/△x;
c=2△y+△x(2b-1)。
下面对式(1-11)作进一步处理,以便得出误差判别递推公式并消除常数c。
将式(2-11)中的下标i改写成i+1,得到:
pi+1=2△y·
xi+1-2△x·
yi+1+c(1-12)
将式(2-12)减去(2-11),并利用xi+1=xi+1,可得:
pi+1=pi+2△y-2△x·
(yi+1-yi)(1-13)
再假设直线的初始端点恰好是其象素点的坐标,即满足:
y1=mx1+b(1-14)
由式(1-11)和式(1-14)得到p1的初始值:
p1=2△y-△x(1-15)
这样,我们可利用误差判别变量,得到如下算法表示:
初始p1=2△y-△x(1-16)
当pi≥0时:
yi+1=yi+1,xi+1=xi+1,pi+1=pi+2(△y-△x)
否则:
yi+1=yi,xi+1=xi+1,pi+1=pi+2△y
从式(1-16)可以看出,第i+1步的判别变量pi+1仅与第i步的判别变量pi、直线的两个端点坐标分量差△x和△y有关,运算中只含有整数相加和乘2运算,而乘2可利用算术左移一位来完成,因此这个算法速度快并易于硬件实现。
三.用VC++6.0中的MFC来实现Bresenham直线算法
实现步骤:
1建立MFC程序:
2选择单个文件:
3接下来step2~step5一直点击NEXT:
4step6点击Finished后出现以下界面点击OK
5选则Resource中的Menu
双击
后,添加绘图按钮,并建立绘图的下鼠按钮命名为bresenham算法画直线
6建好后点击
中的View下属菜单ClassWizard.
7双击
中的
,再将Classname中
换成
再双击
中的COMMAND,弹出框后点击OK.会在下方图中多出阴影部分的容。
8再点击EditCode
在此处添加你的程序代码然后编译。
四程序:
CDC*pDC=GetDC();
CPointPtBegin(80,130);
//起始点
CPointPtEnd(320,370);
//终止点
ints1,s2,interchange;
doubleX=PtBegin.x;
doubleY=PtBegin.y;
doubledeltax,deltay,f,Temp;
deltax=abs(PtEnd.x-PtBegin.x);
deltay=abs(PtEnd.y-PtBegin.y);
if(PtBegin.x-PtBegin.x>
=0)s1=1;
elses1=-1;
if(PtEnd.y-PtBegin.y>
=0)s2=1;
elses2=-1;
f=2*deltay-deltax;
if(deltay>
deltax)
{
Temp=deltax;
deltax=deltay;
deltay=Temp;
interchange=1;
}
elseinterchange=0;
for(inti=1;
i<
=(deltax+deltay);
i++)
if(f>
=0)
{
if(interchange==1)X+=s1;
elseY+=s2;
pDC->
SetPixel(int(X),int(Y),RGB(0,50,250));
f=f-2*deltax;
}
else
if(interchange==1)Y+=s2;
elseX+=s1;
SetPixel(int(X),int(Y),RGB(200,0,0));
f=f+2*deltay;
}
五.运行结果:
击绘图下属菜单按钮运行结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Bresenham 算法 直线
![提示](https://static.bdocx.com/images/bang_tan.gif)