在网上看中点画线算法,很多说法是中点画线类似于Breshehanm画线。
但是助教说的中点画线是寻找直线两端点的中点进行画点,然后分别递归左右半段直线。
当年不好好学习,递归掌握的不好,现在自己试了试,可谓小费时。
代码如下:
/************中点画线***************/
void CDrawLine::DrawMPLine(CPoint a, CPoint b, CDC * pDC)
{
CPoint ptMiddle;
ptMiddle.x = (a.x + b.x) / 2;
ptMiddle.y = (a.y + b.y) / 2;
if((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y) <= 2)
{
pDC->SetPixel(a.x, a.y, RGB(255, 0, 0));
}
else
{
DrawMPLine(a, ptMiddle, pDC);
DrawMPLine(ptMiddle, b, pDC);
}
}
风格不好,参数CDC * pDC是使用的OnDraw函数中的CDC指针,因为该函数只在OnDraw函数中调用了。
想要去掉该参数的话自己在函数体内部生命CDC指针,使用完后delete就行了。