-3

大家好,

我正在努力完成布雷森汉姆线方程的算法。

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

笔记:

bx 等价于 x2 和 super.x x1 与 y 类似。

输出图像

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;
        }

    }

}
4

1 回答 1

0

我在这里找到了这个并在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();
        }
    }

*     
 *    
  *   
   *  
    * 

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

于 2016-08-26T15:29:49.270 回答