DDA算法生成直线(MFC)
至于什么是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度绘制直线,也可以实现橡皮筋效果。模板在这了,需要的自己改吧。