diff options
Diffstat (limited to 'libjava/java/awt/geom/Point2D.java')
-rw-r--r-- | libjava/java/awt/geom/Point2D.java | 316 |
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 |