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; } } }
就说这么多了,这几天被各种实现搞的好乱,早早睡了!