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 に答える