2013-03-06 2 views
1

Этот алгоритм в середине C++ win32 не работает. Он ничего не рисует или только горизонтальные линии. Какие ошибки я принимаю?Алгоритм Midpoint в строке чертежа 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 = 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

+0

Да, это только первая ошибка. Не могли бы вы разместить ссылку на алгоритм? – qPCR4vir

+0

Вы вычисляете d1 и d2, но никогда не используете его. ?? – qPCR4vir

1

Как вы принимаете значение абс в расчете г, он никогда не будет меньше 0. Таким образом, значение Х в одиночку получать увеличивается, и вы получаете горизонтальную линию.

Смежные вопросы