summaryrefslogtreecommitdiffstats
path: root/libjava/java/awt/geom/Point2D.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/awt/geom/Point2D.java')
-rw-r--r--libjava/java/awt/geom/Point2D.java316
1 files changed, 257 insertions, 59 deletions
diff --git a/libjava/java/awt/geom/Point2D.java b/libjava/java/awt/geom/Point2D.java
index 598402b00c0..48b12f67dbd 100644
--- a/libjava/java/awt/geom/Point2D.java
+++ b/libjava/java/awt/geom/Point2D.java
@@ -1,4 +1,5 @@
-/* Copyright (C) 1999, 2000, 2002 Free Software Foundation
+/* Point2D.java -- generic point in 2-D space
+ Copyright (C) 1999, 2000, 2002 Free Software Foundation
This file is part of GNU Classpath.
@@ -37,161 +38,358 @@ exception statement from your version. */
package java.awt.geom;
/**
+ * This class implements a generic point in 2D Cartesian space. The storage
+ * representation is left up to the subclass. Point includes two useful
+ * nested classes, for float and double storage respectively.
+ *
* @author Per Bothner <bothner@cygnus.com>
- * @date February 8, 1999.
+ * @author Eric Blake <ebb9@email.byu.edu>
+ * @since 1.2
+ * @status updated to 1.4
*/
-
-/* Written using "Java Class Libraries", 2nd edition, plus online
- * API docs for JDK 1.2 beta from http://www.javasoft.com.
- * Status: Believed complete and correct, except that neither toString
- * nor hashCode have been compared with JDK output.
- */
-
public abstract class Point2D implements Cloneable
{
+ /**
+ * The default constructor.
+ *
+ * @see Point
+ * @see Point2D.Float
+ * @see Point2D.Double
+ */
+ protected Point2D()
+ {
+ }
+
+ /**
+ * Get the X coordinate, in double precision.
+ *
+ * @return the x coordinate
+ */
public abstract double getX();
- public abstract double getY();
- public abstract void setLocation (double x, double y);
+ /**
+ * Get the Y coordinate, in double precision.
+ *
+ * @return the y coordinate
+ */
+ public abstract double getY();
- protected Point2D ()
+ /**
+ * Set the location of this point to the new coordinates. There may be a
+ * loss of precision.
+ *
+ * @param x the new x coordinate
+ * @param y the new y coordinate
+ */
+ public abstract void setLocation(double x, double y);
+
+ /**
+ * Set the location of this point to the new coordinates. There may be a
+ * loss of precision.
+ *
+ * @param p the point to copy
+ * @throws NullPointerException if p is null
+ */
+ public void setLocation(Point2D p)
{
+ setLocation(p.getX(), p.getY());
}
- public void setLocation (Point2D pt) { setLocation(pt.getX(), pt.getY()); }
-
- static public double distanceSq (double X1, double Y1, double X2, double Y2)
+ /**
+ * Return the square of the distance between two points.
+ *
+ * @param x1 the x coordinate of point 1
+ * @param y1 the y coordinate of point 1
+ * @param x2 the x coordinate of point 2
+ * @param y2 the y coordinate of point 2
+ * @return (x2 - x1)^2 + (y2 - y1)^2
+ */
+ public static double distanceSq(double x1, double y1, double x2, double y2)
{
- X2 -= X1;
- Y2 -= Y1;
- return X2*X2 + Y2*Y2;
+ x2 -= x1;
+ y2 -= y1;
+ return x2 * x2 + y2 * y2;
}
- static public double distance (double X1, double Y1, double X2, double Y2)
+ /**
+ * Return the distance between two points.
+ *
+ * @param x1 the x coordinate of point 1
+ * @param y1 the y coordinate of point 1
+ * @param x2 the x coordinate of point 2
+ * @param y2 the y coordinate of point 2
+ * @return the distance from (x1,y1) to (x2,y2)
+ */
+ static public double distance(double x1, double y1, double x2, double y2)
{
- return Math.sqrt(distanceSq(X1, Y1, X2, Y2));
+ return Math.sqrt(distanceSq(x1, y1, x2, y2));
}
- public double distanceSq (double PX, double PY)
+ /**
+ * Return the square of the distance from this point to the given one.
+ *
+ * @param x the x coordinate of the other point
+ * @param y the y coordinate of the other point
+ * @return the square of the distance
+ */
+ public double distanceSq(double x, double y)
{
- return distanceSq (getX(), PX, getY(), PY);
+ return distanceSq(getX(), x, getY(), y);
}
- public double distance (double PX, double PY)
+ /**
+ * Return the square of the distance from this point to the given one.
+ *
+ * @param p the other point
+ * @return the square of the distance
+ * @throws NullPointerException if p is null
+ */
+ public double distanceSq(Point2D p)
{
- return distance (getX(), PX, getY(), PY);
+ return distanceSq(getX(), p.getX(), getY(), p.getY());
}
- public double distanceSq (Point2D pt)
+ /**
+ * Return the distance from this point to the given one.
+ *
+ * @param x the x coordinate of the other point
+ * @param y the y coordinate of the other point
+ * @return the distance
+ */
+ public double distance(double x, double y)
{
- return distanceSq (getX(), pt.getX(), getY(), pt.getY());
+ return distance(getX(), x, getY(), y);
}
- public double distance (Point2D pt)
+ /**
+ * Return the distance from this point to the given one.
+ *
+ * @param p the other point
+ * @return the distance
+ * @throws NullPointerException if p is null
+ */
+ public double distance(Point2D p)
{
- return distance (getX(), pt.getX(), getY(), pt.getY());
+ return distance(getX(), p.getX(), getY(), p.getY());
}
- public int hashCode() { return (int) getX() ^ (int) getY(); }
-
+ /**
+ * Create a new point of the same run-time type with the same contents as
+ * this one.
+ *
+ * @return the clone
+ */
public Object clone()
{
try
- {
- return super.clone ();
- }
- catch (CloneNotSupportedException _) {return null;}
+ {
+ return super.clone();
+ }
+ catch (CloneNotSupportedException e)
+ {
+ throw (Error) new InternalError().initCause(e); // Impossible
+ }
}
- public boolean equals (Object o)
+ /**
+ * Return the hashcode for this point. The formula is not documented, but
+ * appears to be the same as:
+ * <pre>
+ * long l = Double.doubleToLongBits(getY());
+ * l = l * 31 ^ Double.doubleToLongBits(getX());
+ * return (int) ((l >> 32) ^ l);
+ * </pre>
+ *
+ * @return the hashcode
+ */
+ public int hashCode()
+ {
+ // Talk about a fun time reverse engineering this one!
+ long l = java.lang.Double.doubleToLongBits(getY());
+ l = l * 31 ^ java.lang.Double.doubleToLongBits(getX());
+ return (int) ((l >> 32) ^ l);
+ }
+
+ /**
+ * Compares two points for equality. This returns true if they have the
+ * same coordinates.
+ *
+ * @param o the point to compare
+ * @return true if it is equal
+ */
+ public boolean equals(Object o)
{
if (! (o instanceof Point2D))
return false;
Point2D p = (Point2D) o;
- return getX () == p.getX () && getY () == p.getY ();
+ return getX() == p.getX() && getY() == p.getY();
}
+ /**
+ * This class defines a point in <code>double</code> precision.
+ *
+ * @author Eric Blake <ebb9@email.byu.edu>
+ * @since 1.2
+ * @status updated to 1.4
+ */
public static class Double extends Point2D
{
+ /** The X coordinate. */
public double x;
+
+ /** The Y coordinate. */
public double y;
- public Double ()
+ /**
+ * Create a new point at (0,0).
+ */
+ public Double()
{
- x = 0;
- y = 0;
}
- public Double (double x, double y)
+ /**
+ * Create a new point at (x,y).
+ *
+ * @param x the x coordinate
+ * @param y the y coordinate
+ */
+ public Double(double x, double y)
{
this.x = x;
this.y = y;
}
- public double getX ()
+ /**
+ * Return the x coordinate.
+ *
+ * @return the x coordinate
+ */
+ public double getX()
{
return x;
}
- public double getY ()
+ /**
+ * Return the y coordinate.
+ *
+ * @return the y coordinate
+ */
+ public double getY()
{
return y;
}
- public void setLocation (double x, double y)
+ /**
+ * Sets the location of this point.
+ *
+ * @param x the new x coordinate
+ * @param y the new y coordinate
+ */
+ public void setLocation(double x, double y)
{
this.x = x;
this.y = y;
}
- public String toString ()
+ /**
+ * Returns a string representation of this object. The format is:
+ * <code>"Point2D.Double[" + x + ", " + y + ']'</code>.
+ *
+ * @return a string representation of this object
+ */
+ public String toString()
{
- return "(" + x + ", " + y + ")";
+ return "Point2D.Double[" + x + ", " + y + ']';
}
- }
-
+ } // class Double
+
+ /**
+ * This class defines a point in <code>float</code> precision.
+ *
+ * @author Eric Blake <ebb9@email.byu.edu>
+ * @since 1.2
+ * @status updated to 1.4
+ */
public static class Float extends Point2D
{
+ /** The X coordinate. */
public float x;
+
+ /** The Y coordinate. */
public float y;
- public Float ()
+ /**
+ * Create a new point at (0,0).
+ */
+ public Float()
{
- x = 0;
- y = 0;
}
- public Float (float x, float y)
+ /**
+ * Create a new point at (x,y).
+ *
+ * @param x the x coordinate
+ * @param y the y coordinate
+ */
+ public Float(float x, float y)
{
this.x = x;
this.y = y;
}
- public double getX ()
+ /**
+ * Return the x coordinate.
+ *
+ * @return the x coordinate
+ */
+ public double getX()
{
return x;
}
- public double getY ()
+ /**
+ * Return the y coordinate.
+ *
+ * @return the y coordinate
+ */
+ public double getY()
{
return y;
}
- public void setLocation (double x, double y)
+ /**
+ * Sets the location of this point.
+ *
+ * @param x the new x coordinate
+ * @param y the new y coordinate
+ */
+ public void setLocation(double x, double y)
{
this.x = (float) x;
this.y = (float) y;
}
- public void setLocation (float x, float y)
+ /**
+ * Sets the location of this point.
+ *
+ * @param x the new x coordinate
+ * @param y the new y coordinate
+ */
+ public void setLocation(float x, float y)
{
this.x = x;
this.y = y;
}
- public String toString ()
+ /**
+ * Returns a string representation of this object. The format is:
+ * <code>"Point2D.Float[" + x + ", " + y + ']'</code>.
+ *
+ * @return a string representation of this object
+ */
+ public String toString()
{
- return "(" + x + ", " + y + ")";
+ return "Point2D.Float[" + x + ", " + y + ']';
}
- }
-}
+ } // class Float
+} // class Point2D
OpenPOWER on IntegriCloud