2013-01-25 200 views
-1

只有當斜率介於0和1之間時,它才起作用。我不知道該從哪裏出發。謝謝你的幫助!這個方法讀入兩點,並使用bresenhams算法在它們之間畫出一條線。我不知道去哪裏優化它的所有線路。謝謝你的幫助。我遇到了Bresenham算法的問題

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