sim.util
Class Double2D

java.lang.Object
  extended by sim.util.Double2D
All Implemented Interfaces:
java.io.Serializable

public final class Double2D
extends java.lang.Object
implements java.io.Serializable

Double2D is more or less the same class as java.awt.geom.Point2D.Double, but it is immutable: once the x and y values are set, they cannot be changed (they're final). Why use this immutable class when you could just use Point2D? Because Point2D is broken with respect to hash tables. You use Point2D as a key in a hash table at your own peril. Try this: hash an object by a Point2D as key. Then change the x value of the original Point2D. Ta-da! The object is lost in the hash table.

One day in the far future, Double3D should also be HIGHLY efficient; since it is immutable, it can be passed by value rather than by pointer by a smart compiler. Not today, though. But it's not bad.

This class has an elaborate hash code generation that is much more random than Sun's standard generator, but takes more time. For very large numbers of objects, this is a good idea, but we may change it to a simpler version in the future.

Double2D.equals(...) can compare by value against other Int2Ds and Double2Ds.

See Also:
Serialized Form

Field Summary
 double x
           
 double y
           
 
Constructor Summary
Double2D()
           
Double2D(double x, double y)
           
Double2D(Int2D p)
           
Double2D(MutableDouble2D p)
           
Double2D(MutableInt2D p)
           
Double2D(java.awt.Point p)
           
Double2D(java.awt.geom.Point2D.Double p)
           
Double2D(java.awt.geom.Point2D.Float p)
           
Double2D(java.awt.geom.Point2D p)
          Only included for completeness' sakes, in case a new Point2D subclass is created in the future.
 
Method Summary
 Double2D add(Double2D other)
           
 double angle()
          Returns the length of the vector between -Pi and Pi.
 double distance(Double2D p)
          Returns the distance FROM this Double2D TO the specified point.
 double distance(double x, double y)
          Returns the distance FROM this Double2D TO the specified point
 double distance(Int2D p)
          Returns the distance FROM this Double2D TO the specified point.
 double distance(MutableInt2D p)
          Returns the distance FROM this Double2D TO the specified point.
 double distance(java.awt.geom.Point2D p)
          Returns the distance FROM this Double2D TO the specified point.
 double distanceSq(Double2D p)
          Returns the distance FROM this Double2D TO the specified point.
 double distanceSq(double x, double y)
          Returns the distance FROM this Double2D TO the specified point
 double distanceSq(Int2D p)
          Returns the distance FROM this Double2D TO the specified point.
 double distanceSq(MutableInt2D p)
          Returns the distance FROM this Double2D TO the specified point.
 double distanceSq(java.awt.geom.Point2D p)
          Returns the distance FROM this Double2D TO the specified point
 double dot(Double2D other)
          Takes the dot product this Double2D with another
 boolean equals(java.lang.Object obj)
           
 double getX()
           
 double getY()
           
 int hashCode()
           
 double length()
          Returns the vector length of the Double2D
 double lengthSq()
          Returns the vector length of the Double2D
 double manhattanDistance(Double2D p)
          Returns the manhtattan distance FROM this Double2D TO the specified point
 double manhattanDistance(double x, double y)
          Returns the manhtattan distance FROM this Double2D TO the specified point
 double manhattanDistance(Int2D p)
          Returns the manhtattan distance FROM this Double2D TO the specified point
 double manhattanDistance(MutableDouble2D p)
          Returns the manhtattan distance FROM this Double2D TO the specified point
 double manhattanDistance(MutableInt2D p)
          Returns the manhtattan distance FROM this Double2D TO the specified point
 double manhattanDistance(java.awt.geom.Point2D p)
          Returns the manhtattan distance FROM this Double2D TO the specified point
 Double2D multiply(double val)
          Multiplies each element by scalar "val"
 Double2D negate()
          Returns the negation of this Double2D.
 Double2D normalize()
          Normalizes the vector (sets its length to 1).
 double perpDot(Double2D other)
          2D version of the cross product.
 Double2D resize(double dist)
          Scales the vector to length "dist".
 Double2D rotate(double theta)
          Rotates the Double2D by theta radians
 Double2D subtract(Double2D other)
          Subtracts Double2D "other" from current Double2D using vector subtraction
 java.lang.String toCoordinates()
           
 java.awt.geom.Point2D.Double toPoint2D()
           
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

x

public final double x

y

public final double y
Constructor Detail

Double2D

public Double2D()

Double2D

public Double2D(Int2D p)

Double2D

public Double2D(MutableInt2D p)

Double2D

public Double2D(MutableDouble2D p)

Double2D

public Double2D(java.awt.Point p)

Double2D

public Double2D(java.awt.geom.Point2D.Double p)

Double2D

public Double2D(java.awt.geom.Point2D.Float p)

Double2D

public Double2D(java.awt.geom.Point2D p)
Only included for completeness' sakes, in case a new Point2D subclass is created in the future.


Double2D

public Double2D(double x,
                double y)
Method Detail

getX

public final double getX()

getY

public final double getY()

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

toCoordinates

public java.lang.String toCoordinates()

toPoint2D

public java.awt.geom.Point2D.Double toPoint2D()

hashCode

public final int hashCode()
Overrides:
hashCode in class java.lang.Object

equals

public final boolean equals(java.lang.Object obj)
Overrides:
equals in class java.lang.Object

distance

public double distance(double x,
                       double y)
Returns the distance FROM this Double2D TO the specified point


distance

public double distance(Double2D p)
Returns the distance FROM this Double2D TO the specified point.


distance

public double distance(Int2D p)
Returns the distance FROM this Double2D TO the specified point.


distance

public double distance(MutableInt2D p)
Returns the distance FROM this Double2D TO the specified point.


distance

public double distance(java.awt.geom.Point2D p)
Returns the distance FROM this Double2D TO the specified point.


distanceSq

public double distanceSq(double x,
                         double y)
Returns the distance FROM this Double2D TO the specified point


distanceSq

public double distanceSq(Double2D p)
Returns the distance FROM this Double2D TO the specified point.


distanceSq

public double distanceSq(Int2D p)
Returns the distance FROM this Double2D TO the specified point.


distanceSq

public double distanceSq(MutableInt2D p)
Returns the distance FROM this Double2D TO the specified point.


distanceSq

public double distanceSq(java.awt.geom.Point2D p)
Returns the distance FROM this Double2D TO the specified point


manhattanDistance

public double manhattanDistance(double x,
                                double y)
Returns the manhtattan distance FROM this Double2D TO the specified point


manhattanDistance

public double manhattanDistance(Double2D p)
Returns the manhtattan distance FROM this Double2D TO the specified point


manhattanDistance

public double manhattanDistance(Int2D p)
Returns the manhtattan distance FROM this Double2D TO the specified point


manhattanDistance

public double manhattanDistance(MutableDouble2D p)
Returns the manhtattan distance FROM this Double2D TO the specified point


manhattanDistance

public double manhattanDistance(MutableInt2D p)
Returns the manhtattan distance FROM this Double2D TO the specified point


manhattanDistance

public double manhattanDistance(java.awt.geom.Point2D p)
Returns the manhtattan distance FROM this Double2D TO the specified point


add

public final Double2D add(Double2D other)

subtract

public final Double2D subtract(Double2D other)
Subtracts Double2D "other" from current Double2D using vector subtraction


length

public final double length()
Returns the vector length of the Double2D


angle

public final double angle()
Returns the length of the vector between -Pi and Pi.


lengthSq

public final double lengthSq()
Returns the vector length of the Double2D


multiply

public final Double2D multiply(double val)
Multiplies each element by scalar "val"


resize

public final Double2D resize(double dist)
Scales the vector to length "dist". dist must be a finite value. If the vector has NaN, zero, or infinite values, then the vector cannot be resized to any length except for 0: other lengths will throw an exception in this case.


normalize

public final Double2D normalize()
Normalizes the vector (sets its length to 1). If the vector has NaN or infinite values, or has all zero values, then an exception will be thrown.


dot

public final double dot(Double2D other)
Takes the dot product this Double2D with another


perpDot

public double perpDot(Double2D other)
2D version of the cross product. Rotates current Vector2D 90 degrees and takes the dot product of the result and Double2D "other"


negate

public final Double2D negate()
Returns the negation of this Double2D.


rotate

public final Double2D rotate(double theta)
Rotates the Double2D by theta radians