import display.*;

//The class that the students will fill up with the correct algorithm.

public class Bresenham {

    /*
      Inputs: x1, y1, x2 and y2 -- the endpoints of the line. The line
				   stretches from (x1, y1) to (x2, y2)
              Grid view         -- an object representing the display

      Outputs: none, just draw the line

      Something useful: in order to draw the line, you must set a
	 	 	series of individual pixels. You can do this
	 	 	by making a call to the setPixel method of the
	 	 	Grid object. In other words, the command
	 	 	         view.setPixel(3,4); 
			would turn the pixel at position (3, 4) black.


      NOTE: If you want to have any auxiliary methods (helpers), you
	    must make sure to declare them "static" as well.

     */
    public static void BresenhamAlgorithm(int x1, int y1, 
					  int x2, int y2, Grid view) {

	// ***** YOUR CODE HERE *****
        int error, dx, dy, x, y, xdirection, ydirection;

	//For debugging:
	System.out.println("Entering BresenhamAlgorithm");

	dx = x2 - x1; dy = y2 - y1;
        if (dx < 0) { xdirection = -1; dx = -dx; }
	       else { xdirection = +1; } 
        if (dy < 0) { ydirection = -1; dy = -dy; }
	       else { ydirection = +1; } 
	x = x1; y = y1;
	if (dx > dy)
	    {	       
	      error = (dx + 1) >> 1;
	      while (x != x2) {
		view.setPixel (x, y);
		x += xdirection;
		error += dy;
		if (error > dx)
		    {
		       error -= dx;
		       y += ydirection;
		    }
	    } 
	    }
	else {
	       error = (dy + 1) >> 1;
	       while (y != y2) {
	          view.setPixel (x, y);
		  y += ydirection;
		  error += dx;
		  if (error > dy)
		      {
			 error -= dy;
			 x += xdirection;
		      }
	    }
	}
       view.setPixel (x, y);
    }
}





