Class Point2D

  • All Implemented Interfaces:
    Comparable<Point2D>

    public final class Point2D
    extends Object
    implements Comparable<Point2D>
    The Point class is an immutable data type to encapsulate a two-dimensional point with real-value coordinates.

    Note: in order to deal with the difference behavior of double and Double with respect to -0.0 and +0.0, the Point2D constructor converts any coordinates that are -0.0 to +0.0.

    For additional documentation, see Section 1.2 of Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne.

    Author:
    Robert Sedgewick, Kevin Wayne
    • Field Detail

      • X_ORDER

        public static final Comparator<Point2D> X_ORDER
        Compares two points by x-coordinate.
      • Y_ORDER

        public static final Comparator<Point2D> Y_ORDER
        Compares two points by y-coordinate.
      • R_ORDER

        public static final Comparator<Point2D> R_ORDER
        Compares two points by polar radius.
    • Constructor Detail

      • Point2D

        public Point2D​(double x,
                       double y)
        Initializes a new point (x, y).
        Parameters:
        x - the x-coordinate
        y - the y-coordinate
        Throws:
        IllegalArgumentException - if either x or y is Double.NaN, Double.POSITIVE_INFINITY or Double.NEGATIVE_INFINITY
    • Method Detail

      • x

        public double x()
        Returns the x-coordinate.
        Returns:
        the x-coordinate
      • y

        public double y()
        Returns the y-coordinate.
        Returns:
        the y-coordinate
      • r

        public double r()
        Returns the polar radius of this point.
        Returns:
        the polar radius of this point in polar coordinates: sqrt(x*x + y*y)
      • theta

        public double theta()
        Returns the angle of this point in polar coordinates.
        Returns:
        the angle (in radians) of this point in polar coordinates (between –π and π)
      • ccw

        public static int ccw​(Point2D a,
                              Point2D b,
                              Point2D c)
        Returns true if a→b→c is a counterclockwise turn.
        Parameters:
        a - first point
        b - second point
        c - third point
        Returns:
        { -1, 0, +1 } if a→b→c is a { clockwise, collinear; counterclockwise } turn.
      • area2

        public static double area2​(Point2D a,
                                   Point2D b,
                                   Point2D c)
        Returns twice the signed area of the triangle a-b-c.
        Parameters:
        a - first point
        b - second point
        c - third point
        Returns:
        twice the signed area of the triangle a-b-c
      • distanceTo

        public double distanceTo​(Point2D that)
        Returns the Euclidean distance between this point and that point.
        Parameters:
        that - the other point
        Returns:
        the Euclidean distance between this point and that point
      • distanceSquaredTo

        public double distanceSquaredTo​(Point2D that)
        Returns the square of the Euclidean distance between this point and that point.
        Parameters:
        that - the other point
        Returns:
        the square of the Euclidean distance between this point and that point
      • compareTo

        public int compareTo​(Point2D that)
        Compares two points by y-coordinate, breaking ties by x-coordinate. Formally, the invoking point (x0, y0) is less than the argument point (x1, y1) if and only if either y0 < y1 or if y0 == y1 and x0 < x1.
        Specified by:
        compareTo in interface Comparable<Point2D>
        Parameters:
        that - the other point
        Returns:
        the value 0 if this string is equal to the argument string (precisely when equals() returns true); a negative integer if this point is less than the argument point; and a positive integer if this point is greater than the argument point
      • polarOrder

        public Comparator<Point2D> polarOrder()
        Compares two points by polar angle (between 0 and 2π) with respect to this point.
        Returns:
        the comparator
      • atan2Order

        public Comparator<Point2D> atan2Order()
        Compares two points by atan2() angle (between –π and π) with respect to this point.
        Returns:
        the comparator
      • distanceToOrder

        public Comparator<Point2D> distanceToOrder()
        Compares two points by distance to this point.
        Returns:
        the comparator
      • equals

        public boolean equals​(Object other)
        Compares this point to the specified point.
        Overrides:
        equals in class Object
        Parameters:
        other - the other point
        Returns:
        true if this point equals other; false otherwise
      • toString

        public String toString()
        Return a string representation of this point.
        Overrides:
        toString in class Object
        Returns:
        a string representation of this point in the format (x, y)
      • hashCode

        public int hashCode()
        Returns an integer hash code for this point.
        Overrides:
        hashCode in class Object
        Returns:
        an integer hash code for this point
      • draw

        public void draw()
        Plot this point using standard draw.
      • drawTo

        public void drawTo​(Point2D that)
        Plot a line from this point to that point using standard draw.
        Parameters:
        that - the other point
      • main

        public static void main​(String[] args)
        Unit tests the point data type.
        Parameters:
        args - the command-line arguments