2016-08-26 58 views
-3

好日子全部,Bresenham線算法

我很努力地完成一個bresenham線方程的算法。

我得到的輸出是黑色的輸出,預期的輸出是白色的。 bresenham算法用於在矩形中間打印兩條對角線。有人可以請我糾正我的代碼,以解決它。

注:

BX相當於X2和X1 super.x同樣 y的。

image of Output

public void draw(char [][] matrix) { 
    yCoord = super.y; 
    xCoord = super.x; 
    deltaX = Math.abs(bx - xCoord); 
    deltaY = Math.abs(by - yCoord); 
    int sx = xCoord < bx ? 1 : -1; 
    int sy = yCoord < by ? 1 : -1; 
    delta = deltaX - deltaY; 
    int err2; 

    while (true) { 
     matrix[xCoord][yCoord] = '*'; 
     if (xCoord == bx || yCoord == by) { 
      break; 
     } 
     err2 = 2*delta; 
     if (err2 > -deltaY) { 
      delta -= deltaY; 
      xCoord += sx; 
     } else if (err2 < deltaX) { 
      delta += deltaX; 
      yCoord += sy; 
     } 

    } 

} 
+0

我不確定如何使用終端而不是IDE用於此特定輸出,並且沒有使用終端或調試的先驗知識他們 –

+0

你是認真的嗎?您正在設置帶有星號的像素,這些像素沒有理由在黑色上顯示爲白色。用星號填充圖像並用空格繪製。 –

+0

我的項目的部分細節。沒有多少我可以做@ YvesDaoust –

回答

0

我發現這個here和測試在Java:

static char[][] h(char [][] matrix,int x1,int y1, int x2,int y2){ 
     int dx = x2 - x1; 
     int dy = y2 - y1; 
     int y = y1; 
     int eps = 0; 
     for (int x = x1; x <= x2; x++) { 
      matrix[y][x]='*'; 
      eps += dy; 
      if ((eps << 1) >= dx) { 
       y++; 
       eps -= dx; 
      } 
     } 
     return matrix; 
    } 

public static void main(String[] args) { 
     char[][] input = { 
       {' ',' ',' ',' ',' ',' '}, 
       {' ',' ',' ',' ',' ',' '}, 
       {' ',' ',' ',' ',' ',' '}, 
       {' ',' ',' ',' ',' ',' '}, 
       {' ',' ',' ',' ',' ',' '} 
     }; 
     char[][] matrix = h(input,0,0,4,5); 
     for(int i=0;i<matrix.length;i++){ 
      for(int j=0;j<matrix[0].length;j++){ 
       System.out.print(matrix[i][j]); 
      } 
      System.out.println(); 
     } 
    } 

*  
*  
    * 
    * 
    * 

這似乎並沒有給另一個給出的重疊

相關問題