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;

}

}

}

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

 标签: C++, Bresenham, 图形学

作者  :  sailor

仅仅看明白了还不够,能把别人给讲明白了才算及格。


  1. sailor
    1#
    sailor

    能帮到别人,我感到满足 :smile:

    May 13th, 2011 at 07:05 pm 回复
  2. jackli
    2#
    jackli

    学习了, :smile:

    网站界面很漂亮

    May 15th, 2011 at 08:33 am 回复
      1. sailor
        sailor

        呵呵,谢谢夸奖,谢谢来访

        May 15th, 2011 at 12:28 pm 回复


最新文章