2016-08-26 22 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(); 
     } 
    } 

*  
*  
    * 
    * 
    * 

这似乎并没有给另一个给出的重叠