Overview Package Class Use Source Tree Index Deprecated About
GNU Classpath (0.95)
Frames | No Frames

Source for java.awt.geom.Point2D

 1:  /* Point2D.java -- generic point in 2-D space
 2:  Copyright (C) 1999, 2000, 2002, 2004, 2006, Free Software Foundation
 3: 
 4: This file is part of GNU Classpath.
 5: 
 6: GNU Classpath is free software; you can redistribute it and/or modify
 7: it under the terms of the GNU General Public License as published by
 8: the Free Software Foundation; either version 2, or (at your option)
 9: any later version.
 10: 
 11: GNU Classpath is distributed in the hope that it will be useful, but
 12: WITHOUT ANY WARRANTY; without even the implied warranty of
 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 14: General Public License for more details.
 15: 
 16: You should have received a copy of the GNU General Public License
 17: along with GNU Classpath; see the file COPYING. If not, write to the
 18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 19: 02110-1301 USA.
 20: 
 21: Linking this library statically or dynamically with other modules is
 22: making a combined work based on this library. Thus, the terms and
 23: conditions of the GNU General Public License cover the whole
 24: combination.
 25: 
 26: As a special exception, the copyright holders of this library give you
 27: permission to link this library with independent modules to produce an
 28: executable, regardless of the license terms of these independent
 29: modules, and to copy and distribute the resulting executable under
 30: terms of your choice, provided that you also meet, for each linked
 31: independent module, the terms and conditions of the license of that
 32: module. An independent module is a module which is not derived from
 33: or based on this library. If you modify this library, you may extend
 34: this exception to your version of the library, but you are not
 35: obligated to do so. If you do not wish to do so, delete this
 36: exception statement from your version. */
 37: 
 38: 
 39:  package java.awt.geom;
 40: 
 41:  /**
 42:  * This class implements a generic point in 2D Cartesian space. The storage
 43:  * representation is left up to the subclass. Point includes two useful
 44:  * nested classes, for float and double storage respectively.
 45:  *
 46:  * @author Per Bothner (bothner@cygnus.com)
 47:  * @author Eric Blake (ebb9@email.byu.edu)
 48:  * @since 1.2
 49:  * @status updated to 1.4
 50:  */
 51:  public abstract class Point2D implements Cloneable
 52: {
 53:  /**
 54:  * The default constructor.
 55:  *
 56:  * @see java.awt.Point
 57:  * @see Point2D.Float
 58:  * @see Point2D.Double
 59:  */
 60:  protected Point2D()
 61:  {
 62:  }
 63: 
 64:  /**
 65:  * Get the X coordinate, in double precision.
 66:  *
 67:  * @return the x coordinate
 68:  */
 69:  public abstract double getX();
 70: 
 71:  /**
 72:  * Get the Y coordinate, in double precision.
 73:  *
 74:  * @return the y coordinate
 75:  */
 76:  public abstract double getY();
 77: 
 78:  /**
 79:  * Set the location of this point to the new coordinates. There may be a
 80:  * loss of precision.
 81:  *
 82:  * @param x the new x coordinate
 83:  * @param y the new y coordinate
 84:  */
 85:  public abstract void setLocation(double x, double y);
 86: 
 87:  /**
 88:  * Set the location of this point to the new coordinates. There may be a
 89:  * loss of precision.
 90:  *
 91:  * @param p the point to copy
 92:  * @throws NullPointerException if p is null
 93:  */
 94:  public void setLocation(Point2D p)
 95:  {
 96:  setLocation(p.getX(), p.getY());
 97:  }
 98: 
 99:  /**
 100:  * Return the square of the distance between two points.
 101:  *
 102:  * @param x1 the x coordinate of point 1
 103:  * @param y1 the y coordinate of point 1
 104:  * @param x2 the x coordinate of point 2
 105:  * @param y2 the y coordinate of point 2
 106:  * @return (x2 - x1)^2 + (y2 - y1)^2
 107:  */
 108:  public static double distanceSq(double x1, double y1, double x2, double y2)
 109:  {
 110:  x2 -= x1;
 111:  y2 -= y1;
 112:  return x2 * x2 + y2 * y2;
 113:  }
 114: 
 115:  /**
 116:  * Return the distance between two points.
 117:  *
 118:  * @param x1 the x coordinate of point 1
 119:  * @param y1 the y coordinate of point 1
 120:  * @param x2 the x coordinate of point 2
 121:  * @param y2 the y coordinate of point 2
 122:  * @return the distance from (x1,y1) to (x2,y2)
 123:  */
 124:  public static double distance(double x1, double y1, double x2, double y2)
 125:  {
 126:  return Math.sqrt(distanceSq(x1, y1, x2, y2));
 127:  }
 128: 
 129:  /**
 130:  * Return the square of the distance from this point to the given one.
 131:  *
 132:  * @param x the x coordinate of the other point
 133:  * @param y the y coordinate of the other point
 134:  * @return the square of the distance
 135:  */
 136:  public double distanceSq(double x, double y)
 137:  {
 138:  return distanceSq(getX(), getY(), x, y);
 139:  }
 140: 
 141:  /**
 142:  * Return the square of the distance from this point to the given one.
 143:  *
 144:  * @param p the other point
 145:  * @return the square of the distance
 146:  * @throws NullPointerException if p is null
 147:  */
 148:  public double distanceSq(Point2D p)
 149:  {
 150:  return distanceSq(getX(), getY(), p.getX(), p.getY());
 151:  }
 152: 
 153:  /**
 154:  * Return the distance from this point to the given one.
 155:  *
 156:  * @param x the x coordinate of the other point
 157:  * @param y the y coordinate of the other point
 158:  * @return the distance
 159:  */
 160:  public double distance(double x, double y)
 161:  {
 162:  return distance(getX(), getY(), x, y);
 163:  }
 164: 
 165:  /**
 166:  * Return the distance from this point to the given one.
 167:  *
 168:  * @param p the other point
 169:  * @return the distance
 170:  * @throws NullPointerException if p is null
 171:  */
 172:  public double distance(Point2D p)
 173:  {
 174:  return distance(getX(), getY(), p.getX(), p.getY());
 175:  }
 176: 
 177:  /**
 178:  * Create a new point of the same run-time type with the same contents as
 179:  * this one.
 180:  *
 181:  * @return the clone
 182:  */
 183:  public Object clone()
 184:  {
 185:  try
 186:  {
 187:  return super.clone();
 188:  }
 189:  catch (CloneNotSupportedException e)
 190:  {
 191:  throw (Error) new InternalError().initCause(e); // Impossible
 192:  }
 193:  }
 194: 
 195:  /**
 196:  * Return the hashcode for this point. The formula is not documented, but
 197:  * appears to be the same as:
 198:  * <pre>
 199:  * long l = Double.doubleToLongBits(getY());
 200:  * l = l * 31 ^ Double.doubleToLongBits(getX());
 201:  * return (int) ((l >> 32) ^ l);
 202:  * </pre>
 203:  *
 204:  * @return the hashcode
 205:  */
 206:  public int hashCode()
 207:  {
 208:  // Talk about a fun time reverse engineering this one!
 209:  long l = java.lang.Double.doubleToLongBits(getY());
 210:  l = l * 31 ^ java.lang.Double.doubleToLongBits(getX());
 211:  return (int) ((l >> 32) ^ l);
 212:  }
 213: 
 214:  /**
 215:  * Compares two points for equality. This returns true if they have the
 216:  * same coordinates.
 217:  *
 218:  * @param o the point to compare
 219:  * @return true if it is equal
 220:  */
 221:  public boolean equals(Object o)
 222:  {
 223:  if (! (o instanceof Point2D))
 224:  return false;
 225:  Point2D p = (Point2D) o;
 226:  return getX() == p.getX() && getY() == p.getY();
 227:  }
 228: 
 229:  /**
 230:  * This class defines a point in <code>double</code> precision.
 231:  *
 232:  * @author Eric Blake (ebb9@email.byu.edu)
 233:  * @since 1.2
 234:  * @status updated to 1.4
 235:  */
 236:  public static class Double extends Point2D
 237:  {
 238:  /** The X coordinate. */
 239:  public double x;
 240: 
 241:  /** The Y coordinate. */
 242:  public double y;
 243: 
 244:  /**
 245:  * Create a new point at (0,0).
 246:  */
 247:  public Double()
 248:  {
 249:  }
 250: 
 251:  /**
 252:  * Create a new point at (x,y).
 253:  *
 254:  * @param x the x coordinate
 255:  * @param y the y coordinate
 256:  */
 257:  public Double(double x, double y)
 258:  {
 259:  this.x = x;
 260:  this.y = y;
 261:  }
 262: 
 263:  /**
 264:  * Return the x coordinate.
 265:  *
 266:  * @return the x coordinate
 267:  */
 268:  public double getX()
 269:  {
 270:  return x;
 271:  }
 272: 
 273:  /**
 274:  * Return the y coordinate.
 275:  *
 276:  * @return the y coordinate
 277:  */
 278:  public double getY()
 279:  {
 280:  return y;
 281:  }
 282: 
 283:  /**
 284:  * Sets the location of this point.
 285:  *
 286:  * @param x the new x coordinate
 287:  * @param y the new y coordinate
 288:  */
 289:  public void setLocation(double x, double y)
 290:  {
 291:  this.x = x;
 292:  this.y = y;
 293:  }
 294: 
 295:  /**
 296:  * Returns a string representation of this object. The format is:
 297:  * <code>"Point2D.Double[" + x + ", " + y + ']'</code>.
 298:  *
 299:  * @return a string representation of this object
 300:  */
 301:  public String toString()
 302:  {
 303:  return "Point2D.Double[" + x + ", " + y + ']';
 304:  }
 305:  } // class Double
 306: 
 307:  /**
 308:  * This class defines a point in <code>float</code> precision.
 309:  *
 310:  * @author Eric Blake (ebb9@email.byu.edu)
 311:  * @since 1.2
 312:  * @status updated to 1.4
 313:  */
 314:  public static class Float extends Point2D
 315:  {
 316:  /** The X coordinate. */
 317:  public float x;
 318: 
 319:  /** The Y coordinate. */
 320:  public float y;
 321: 
 322:  /**
 323:  * Create a new point at (0,0).
 324:  */
 325:  public Float()
 326:  {
 327:  }
 328: 
 329:  /**
 330:  * Create a new point at (x,y).
 331:  *
 332:  * @param x the x coordinate
 333:  * @param y the y coordinate
 334:  */
 335:  public Float(float x, float y)
 336:  {
 337:  this.x = x;
 338:  this.y = y;
 339:  }
 340: 
 341:  /**
 342:  * Return the x coordinate.
 343:  *
 344:  * @return the x coordinate
 345:  */
 346:  public double getX()
 347:  {
 348:  return x;
 349:  }
 350: 
 351:  /**
 352:  * Return the y coordinate.
 353:  *
 354:  * @return the y coordinate
 355:  */
 356:  public double getY()
 357:  {
 358:  return y;
 359:  }
 360: 
 361:  /**
 362:  * Sets the location of this point.
 363:  *
 364:  * @param x the new x coordinate
 365:  * @param y the new y coordinate
 366:  */
 367:  public void setLocation(double x, double y)
 368:  {
 369:  this.x = (float) x;
 370:  this.y = (float) y;
 371:  }
 372: 
 373:  /**
 374:  * Sets the location of this point.
 375:  *
 376:  * @param x the new x coordinate
 377:  * @param y the new y coordinate
 378:  */
 379:  public void setLocation(float x, float y)
 380:  {
 381:  this.x = x;
 382:  this.y = y;
 383:  }
 384: 
 385:  /**
 386:  * Returns a string representation of this object. The format is:
 387:  * <code>"Point2D.Float[" + x + ", " + y + ']'</code>.
 388:  *
 389:  * @return a string representation of this object
 390:  */
 391:  public String toString()
 392:  {
 393:  return "Point2D.Float[" + x + ", " + y + ']';
 394:  }
 395:  } // class Float
 396: } // class Point2D
Overview Package Class Use Source Tree Index Deprecated About
GNU Classpath (0.95)

AltStyle によって変換されたページ (->オリジナル) /