Bresenham线算法

时间:2016-08-26 12:25:15

标签: java algorithm line rasterizing bresenham

美好的一天,

我正在努力完成bresenham线方程的算法。

我得到的输出是黑色输出,预期输出为白色。 bresenham算法用于打印矩形中间的两条对角线。有人可以在我的代码上纠正我,以便解决它。

注意:

bx相当于x2和super.x x1 同样适用于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;
        }

    }

}

1 个答案:

答案 0 :(得分: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();
        }
    }

给出

*     
 *    
  *   
   *  
    * 

这似乎没有给出对方给出的重叠