2013-03-06 76 views
1

C++ win32中的這個中點算法不起作用。它沒有畫任何東西或只畫水平線。我在做什麼錯誤?繪製線C++的中點算法

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

你的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); 
+0

我做了,但它也沒有工作 – Alyafey 2013-03-06 19:31:51

+0

是的,這只是第一個錯誤。你可以發佈一個鏈接到算法? – qPCR4vir 2013-03-06 19:38:15

+0

你計算d1和d2但從不使用它。 ?? – qPCR4vir 2013-03-06 19:40:47

1

當你正在服用的d計算的ABS值,它永遠不會小於0,所以X的值單獨得到增加,你所得到的水平線。