private static void drawLine(int x0,int y0,int x1,int y1,boolean[][] pic){
  final int xres=pic.length, yres=pic[0].length;
  y0=(y0 < 0) ? 0 : (y0 >= yres) ? (yres - 1) : y0;
  y1=(y1 < 0) ? 0 : (y1 >= yres) ? (yres - 1) : y1;
  x0=(x0 < 0) ? 0 : (x0 >= xres) ? (xres - 1) : x0;
  x1=(x1 < 0) ? 0 : (x1 >= xres) ? (xres - 1) : x1;
  final int dx=+Math.abs(x1 - x0), sx=x0 < x1 ? 1 : -1;
  final int dy=-Math.abs(y1 - y0), sy=y0 < y1 ? 1 : -1;
  int err=dx + dy;
  for (; ; ) {
    pic[x0][y0]=true;
    if (x0 == x1 && y0 == y1) {
      break;
    }
    final int e2=err << 1;
    if (e2 > dy) {
      err+=dy;
      x0+=sx;
    }
    if (e2 < dx) {
      err+=dx;
      y0+=sy;
    }
  }
}

private static void drawLine ( int x0 , int y0 , int x1 , int y1 , boolean [ ] [ ] pic ) { final int xres = pic . length , yres = pic [ 0 ] . length ; y0 = ( y0 < 0 ) ? 0 : ( y0 >= yres ) ? ( yres - 1 ) : y0 ; y1 = ( y1 < 0 ) ? 0 : ( y1 >= yres ) ? ( yres - 1 ) : y1 ; x0 = ( x0 < 0 ) ? 0 : ( x0 >= xres ) ? ( xres - 1 ) : x0 ; x1 = ( x1 < 0 ) ? 0 : ( x1 >= xres ) ? ( xres - 1 ) : x1 ; final int dx = + Math . abs ( x1 - x0 ) , sx = x0 < x1 ? 1 : - 1 ; final int dy = - Math . abs ( y1 - y0 ) , sy = y0 < y1 ? 1 : - 1 ; int err = dx + dy ; for ( ; ; ) { pic [ x0 ] [ y0 ] = true ; if ( x0 == x1 && y0 == y1 ) { break ; } final int e2 = err << 1 ; if ( e2 > dy ) { err += dy ; x0 += sx ; } if ( e2 < dx ) { err += dx ; y0 += sy ; } } }
draw a line onto the array , using the classic bresenham algorithm .
