/** Point is an interface for a class of objects representing
 *  points in the plane.
 * @author Adam Shaw
 */

public interface Point {

    /** returns the x coordinate of the current Point */
    public double x();

    /** returns the y coordinate of the current Point */
    public double y();

    /** returns the distance from the current Point to "that" 
     * @param that a Point
     */
    public double dist(Point that);

    /** returns the distance from the current Point to the origin 
     */
    public double distFromOrigin();

    /** returns the midpoint between the current Point and "that" 
     * @param that a Point
     */
    public Point midpoint(Point that);

    /** returns true if the current Point is above "that" 
     * @param that a Point
     */
    public boolean isAbove(Point that);

    /** returns true if the current Point is below "that" 
     * @param that a Point
     */
    public boolean isBelow(Point that);

    /** returns true if the current Point is to the left of "that" 
     * @param that a Point
     */
    public boolean isLeftOf(Point that);

    /** returns true if the current Point is to the right of "that" 
     * @param that a Point
     */
    public boolean isRightOf(Point that);

    /** returns a new Point which is the current Point translated
     * horizontally by "d"
     * @param d a double
     */
    public Point translatedHoriz(double d);

    /** returns a new Point which is the current Point translated
     * vertically by "d" 
     * @param d a double
     */
    public Point translatedVert(double d);

    /** returns a new Point which is the current Point translated
     * horizontally by "h" and vertically by "v"
     * @param h a double
     * @param v a double
     */
    public Point translated(double h, double v);

    /** returns a textual representation of the current Point */
    public String toString();

}
