1

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);
    }

}
4

2 回答 2

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);
于 2013-03-06T17:12:06.313 回答
1

当您在计算 d 时采用 abs 值时,它永远不会小于 0。所以 X 的值单独增加,而您得到的是水平线。

于 2013-03-06T21:38:43.410 回答