Bresenham算法画直线Word下载.docx

上传人:b****4 文档编号:18506783 上传时间:2022-12-18 格式:DOCX 页数:8 大小:133.26KB
下载 相关 举报
Bresenham算法画直线Word下载.docx_第1页
第1页 / 共8页
Bresenham算法画直线Word下载.docx_第2页
第2页 / 共8页
Bresenham算法画直线Word下载.docx_第3页
第3页 / 共8页
Bresenham算法画直线Word下载.docx_第4页
第4页 / 共8页
Bresenham算法画直线Word下载.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

Bresenham算法画直线Word下载.docx

《Bresenham算法画直线Word下载.docx》由会员分享,可在线阅读,更多相关《Bresenham算法画直线Word下载.docx(8页珍藏版)》请在冰豆网上搜索。

Bresenham算法画直线Word下载.docx

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;

}

五.运行结果:

击绘图下属菜单按钮运行结果:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1