闻心阁

一蓑烟雨看苍生,半壶浊酒笑红尘

Bresenham算法生成直线(MFC)

2011-05-12 约 1 分钟读完 搬砖秘籍

前一篇,我写了关于DDA生成直线算法的实现代码,今天继续跟进,这是一个比DDA还要好的算法,叫做Bresenham算法,废话不多说了,直接放代码,我把代码封装成一个函数,要用的直接修改使用即可。

下面是实现代码:

void S2BreLine::BreLine(CPoint pntStart,CPoint pntEnd,CDC *pDC)

{

int s1,s2,interchange;

int X = pntStart.x;

int Y = pntStart.y;

int deltax,deltay,f,Temp;

deltax=abs(pntEnd.x-pntStart.x);

deltay=abs(pntEnd.y-pntStart.y);

 

if(pntEnd.x-pntStart.x>=0) s1=1; else s1=-1;//设置步进值

if(pntEnd.y-pntStart.y>=0) s2=1; else s2=-1;

f=2*deltay-deltax;//2dy-dx

if(deltay>deltax)//斜率大于一,进行坐标转换

{

Temp=deltax;

deltax=deltay;

deltay=Temp;

interchange=1;

}

else interchange=0;

for(int i=1;i<=deltax+deltay;i++)

{

if(f>=0)

{

if(interchange==1) X+=s1;

else Y+=s2;

pDC->SetPixel(X,Y,m_color);

f=f-2*deltax;

}

else

{

if(interchange==1) Y+=s2;

else X+=s1;

pDC->SetPixel(X,Y,m_color);

f=f+2*deltay;

}

}

}

就说这么多了,这几天被各种实现搞的好乱,早早睡了!