Bresenham算法生成直线(MFC)
前一篇,我写了关于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;
}
}
}
就说这么多了,这几天被各种实现搞的好乱,早早睡了!