绘制线c ++中的中点算法

时间:2013-03-06 17:06:07

标签: c++ visual-studio-2010 algorithm visual-c++ graphics

c ++ win32中的这个中点算法不起作用。它没有绘制或只绘制水平线。我做了什么错误?

void midPoint(HDC hdc)
{

    double dx = end.getXPoint()-start.getXPoint();
    double dy = end.getYPoint()-start.getYPoint();

    double x = start.getXPoint();
    double y = start.getYPoint();
    SetPixel(hdc,x,y,color);

    double d = dx - (dy/2);
    double d1 = dx;
    double d2 = abs(dx-dy);

    while(x < end.getXPoint())
    {
    d = abs(((( y+0.5)-start.getYPoint())*dx) - (((x+1)-start.getXPoint())*dy));

    if(d < 0)
    {
        x = x+1;
        y = y+1;
    }
    else
    {
        x = x+1;
    }
    SetPixel(hdc,x,y,color);
    }

}

2 个答案:

答案 0 :(得分:4)

你的d永远不会<0。修改d的公式,特别是(和)。

d = abs(((( y+0.5)-start.getYPoint())*dx) - (((x+1)-start.getXPoint())*dy));

    if(d < 0)
    {
        x = x+1;
        y = y+1;   // never executed
    }
    else
    {
        x = x+1;   // horizontal line
    }
    SetPixel(hdc,x,y,color);

答案 1 :(得分:1)

当你在d的计算中得到abs值时,它永远不会小于0.所以X的值单独增加并且你得到水平线。