2013-01-25 3 views
-1

Он работает только тогда, когда наклон между 0 и 1. Я не уверен, куда идти отсюда. Спасибо за вашу помощь! Этот метод читается в двух точках и рисует линию между ними, используя bresenhams algo. Я не знаю, куда идти, чтобы оптимизировать его для всех линий. Спасибо за вашу помощь.У меня возникают проблемы с алгоритмом Брешенема

void Bresenhams(int x1, int y1, int xk, int yk) 
    { 
     int deltaX = xk - x1; 
     int deltaY = yk - y1; 
     int error = 0; 
     int y = y1; 
     int x = x1; 
     int doubleDeltaX = 2 * deltaX; 
     bool steep = Math.Abs(yk - y1) > Math.Abs(xk - x1); 



     canvas.SetPixel(x1, y1, Color.Black); 

     if (!steep) 
     { 
      for (int i = x1 + 1; i <= xk; i++) 
      { 

       if (x1 > xk) 
       { 
        int temp = x1; 
        x1 = xk; 
        xk = temp; 

        temp = y1; 
        y1 = yk; 
        yk = temp; 

       } 

       error = error + deltaY; 
       if (error > deltaX) 
       { 
        y++; 
        error -= doubleDeltaX; 
       } 
       canvas.SetPixel(i, y, Color.Black); 
      } 
     } 
     else 
     { 
      for (int i = y1 + 1; i <= yk; i++) 
      { 

       if (y1 > yk) 
       { 
        int temp = x1; 
        x1 = xk; 
        xk = temp; 

        temp = y1; 
        y1 = yk; 
        yk = temp; 
       } 

       error = error + deltaY; 
       if (error > deltaY) 
       { 
        y++; 
        error -= doubleDeltaX; 
       } 
       canvas.SetPixel(x, i, Color.Black); 
      } 
     } 

     pictureBox1.Image = canvas; 

    } 

ответ

1

Разделите круг на 8 частей. Вы можете запустить Bresenham на один октант и нарисовать все 8 одновременно. Для центра на 0,0:

0-45 x,y 
    45-90 y,x 
90-135 -y,x 
135-180 -x,y 
180-225 -x,-y 
225-270 -y,-x 
270-315 y,-x 
315-360 x,-y 
Смежные вопросы