闻心阁

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

DDA算法生成直线(MFC)

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

至于什么是DDA算法,这里不想多说,如果这个都不明白的话,可以直接跳过此文了,我这里给出的DDA生成直线的算法,以及在VS2008下的实现过程,这是对自己经验的一个总结,也是对所学到一个记录,这里先mark一下。

下面是代码实现,需要的拿去:

 

void S2DDALine::DDA(CPoint pntStart,CPoint pntEnd,CDC *pDC)

{

float x,y;

float dx,dy,k;

dx=(float)(pntEnd.x-pntStart.x);

dy=(float)(pntEnd.y-pntStart.y);

k=dy/dx;//求斜率

if(abs(k)<1)

{

if (pntStart.x>pntEnd.x)//坐标置换,这个很重要哦

{

CPoint temp;

temp=pntStart;

pntStart=pntEnd;

pntEnd=temp;

}

y=pntStart.y;

for (x=pntStart.x;x<=pntEnd.x;x++)

{

pDC->SetPixel(x,int(y+0.5),m_color);

y=y+k;

}

}

if (abs(k)>=1)

{

if (pntStart.y>pntEnd.y)//坐标置换

{

CPoint temp;

temp=pntStart;

pntStart=pntEnd;

pntEnd=temp;

}

x=pntStart.x;

for (y=pntStart.y;y<=pntEnd.y;y++)

{

pDC->SetPixel(int(x+0.5),y,m_color);

x=x+1/k;

}

}

}

通过上面的代码可以实现MFC下360度绘制直线,也可以实现橡皮筋效果。模板在这了,需要的自己改吧。