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度绘制直线,也可以实现橡皮筋效果。模板在这了,需要的自己改吧。