美好的一天,
我正在努力完成bresenham线方程的算法。
我得到的输出是黑色输出,预期输出为白色。 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;
}
}
}
答案 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();
}
}
给出
*
*
*
*
*
这似乎没有给出对方给出的重叠