CS 4773 Object Oriented Systems
LinePos.java

import java.awt.*;

public class LinePos {

   private int start_x;
   private int start_y;
   private int end_x;
   private int end_y;
   private double current_x;
   private double current_y;
   private double delta_x;
   private double delta_y;
   private int max_index;
   private int current_index;
   private boolean forward = true;

   public LinePos(Point start, Point end) {
      start_x = start.x;
      start_y = start.y;
      end_x = end.x;
      end_y = end.y;
      delta_x = end_x - start_x;
      delta_y = end_y - start_y;
      if ( (delta_x == 0) && (delta_y == 0) )
         max_index = 0;
      else if (Math.abs(delta_x) > Math.abs(delta_y))
         max_index = (int)Math.round(Math.abs(delta_x));
      else
         max_index = (int)Math.round(Math.abs(delta_y));
      if (max_index > 0) {
         delta_x = delta_x/max_index;
         delta_y = delta_y/max_index;
      }
      current_index = 0;
   }

   public Point GetPosition() {
      return new Point(start_x + (int)Math.round(current_index*delta_x),
                       start_y + (int)Math.round(current_index*delta_y));
   }

   public Point GetStart() {
      return new Point(start_x,start_y);
   }

   public Point GetEnd() {
      return new Point(end_x,end_y);
   }

   public void NextPosition(boolean f) {
      if (f)
         ForwardPosition();
      else
         PreviousPosition();
   }

   public void NextPosition() {
      NextPosition(forward);
   }

   public void ForwardPosition() {
      if (current_index < max_index)
         current_index++;
   }

   public void PreviousPosition() {
      if (current_index > 0)
         current_index--;
   }

   public boolean isDone() {
      if ( forward && (current_index == max_index) )
         return true;
      if ( !forward && (current_index == 0) )
         return true;
      return false;
   }

   public boolean isForward() {
      return forward;
   }

   public void setForward(boolean flag) {
      forward = flag;
   }

}