Package com.ardor3d.math
Class Vector2
java.lang.Object
com.ardor3d.math.Vector2
- All Implemented Interfaces:
Poolable
,ReadOnlyVector2
,Savable
,Externalizable
,Serializable
,Cloneable
public class Vector2
extends Object
implements Cloneable, Savable, Externalizable, ReadOnlyVector2, Poolable
Vector2 represents a point or vector in a two dimensional system. This implementation stores its data in
double-precision.
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionprotected double
protected double
static final ReadOnlyVector2
-1, -1static final ReadOnlyVector2
-1, 0static final ReadOnlyVector2
0, -1static final ReadOnlyVector2
1, 1static final ReadOnlyVector2
1, 0static final ReadOnlyVector2
0, 1static final ReadOnlyVector2
0, 0 -
Constructor Summary
ConstructorDescriptionVector2()
Constructs a new vector set to (0, 0).Vector2
(double x, double y) Constructs a new vector set to (x, y).Vector2
(ReadOnlyVector2 src) Constructs a new vector set to the (x, y) values of the given source vector. -
Method Summary
Modifier and TypeMethodDescriptionAdds the given values to those of this vector and returns them in storeadd
(ReadOnlyVector2 source, Vector2 store) Adds the values of the given source vector to those of this vector and returns them in store.addLocal
(double x, double y) Increments the values of this vector with the given x and y values.addLocal
(ReadOnlyVector2 source) Increments the values of this vector with the x and y values of the given vector.double
angleBetween
(ReadOnlyVector2 otherVector) clone()
double
distance
(double x, double y) double
distance
(ReadOnlyVector2 destination) double
distanceSquared
(double x, double y) double
distanceSquared
(ReadOnlyVector2 destination) Divides the values of this vector by the given scale values and returns the result in store.Divides the values of this vector by the given scalar value and returns the result in store.divide
(ReadOnlyVector2 scale, Vector2 store) Divides the values of this vector by the given scale values and returns the result in store.divideLocal
(double scalar) Internally modifies the values of this vector by dividing them each by the given scalar value.divideLocal
(double x, double y) Internally modifies the values of this vector by dividing them each by the values of the given scale.divideLocal
(ReadOnlyVector2 scale) Internally modifies the values of this vector by dividing them each by the values of the given scale.double
dot
(double x, double y) double
dot
(ReadOnlyVector2 vec) boolean
Compares this object against the specified objectstatic final Vector2
double
double
getValue
(int index) double
getX()
float
getXf()
double
getY()
float
getYf()
int
hashCode()
static boolean
isValid
(ReadOnlyVector2 vector) Check a vector... if it is null or its doubles are NaN or infinite, return false.double
length()
double
lerp
(ReadOnlyVector2 endVec, double scalar, Vector2 store) Performs a linear interpolation between this vector and the given end vector, using the given scalar as a percent. iow, if changeAmnt is closer to 0, the result will be closer to the current value of this vector and if it is closer to 1, the result will be closer to the end value.static Vector2
lerp
(ReadOnlyVector2 beginVec, ReadOnlyVector2 endVec, double scalar, Vector2 store) Performs a linear interpolation between the given begin and end vectors, using the given scalar as a percent.lerpLocal
(ReadOnlyVector2 endVec, double scalar) Performs a linear interpolation between this vector and the given end vector, using the given scalar as a percent. iow, if changeAmnt is closer to 0, the result will be closer to the current value of this vector and if it is closer to 1, the result will be closer to the end value.lerpLocal
(ReadOnlyVector2 beginVec, ReadOnlyVector2 endVec, double scalar) Performs a linear interpolation between the given begin and end vectors, using the given scalar as a percent.Multiplies the values of this vector by the given scale values and returns the result in store.Multiplies the values of this vector by the given scalar value and returns the result in store.multiply
(ReadOnlyVector2 scale, Vector2 store) Multiplies the values of this vector by the given scale values and returns the result in store.multiplyLocal
(double scalar) Internally modifies the values of this vector by multiplying them each by the given scalar value.multiplyLocal
(double x, double y) Internally modifies the values of this vector by multiplying them each by the values of the given scale.multiplyLocal
(ReadOnlyVector2 scale) Internally modifies the values of this vector by multiplying them each by the values of the given scale.Creates a new unit length vector from this one by dividing by length.Converts this vector into a unit vector by dividing it internally by its length.void
read
(InputCapsule capsule) void
Used with serialization.static final void
Releases a Vector2 back to be used by a future call to fetchTempInstance.rotateAroundOrigin
(double angle, boolean clockwise, Vector2 store) Creates a new vector representing this vector rotated around 0,0 by a specified angle in a given direction.rotateAroundOriginLocal
(double angle, boolean clockwise) Internally rotates this vector around 0,0 by a specified angle in a given direction.scaleAdd
(double scale, ReadOnlyVector2 add, Vector2 store) Scales this vector by multiplying its values with a given scale value, then adding a given "add" value.scaleAddLocal
(double scale, ReadOnlyVector2 add) Internally modifies this vector by multiplying its values with a given scale value, then adding a given "add" value.set
(double x, double y) Sets the value of this vector to (x, y)set
(ReadOnlyVector2 source) Sets the value of this vector to the (x, y) values of the provided source vector.void
setValue
(int index, double value) void
setX
(double x) Sets the first component of this vector to the given double value.void
setY
(double y) Sets the second component of this vector to the given double value.double
smallestAngleBetween
(ReadOnlyVector2 otherVector) Subtracts the given values from those of this vector and returns them in store.subtract
(ReadOnlyVector2 source, Vector2 store) Subtracts the values of the given source vector from those of this vector and returns them in store.subtractLocal
(double x, double y) Decrements the values of this vector by the given x and y values.subtractLocal
(ReadOnlyVector2 source) Decrements the values of this vector by the x and y values from the given source vector.double[]
toArray
(double[] store) Stores the double values of this vector in the given double array.toString()
void
write
(OutputCapsule capsule) void
Used with serialization.zero()
Sets the value of this vector to (0, 0)
-
Field Details
-
ZERO
0, 0 -
ONE
1, 1 -
NEG_ONE
-1, -1 -
UNIT_X
1, 0 -
NEG_UNIT_X
-1, 0 -
UNIT_Y
0, 1 -
NEG_UNIT_Y
0, -1 -
_x
protected double _x -
_y
protected double _y
-
-
Constructor Details
-
Vector2
public Vector2()Constructs a new vector set to (0, 0). -
Vector2
Constructs a new vector set to the (x, y) values of the given source vector.- Parameters:
src
- the vector to copy from
-
Vector2
public Vector2(double x, double y) Constructs a new vector set to (x, y).- Parameters:
x
- the abscissay
- the ordinate
-
-
Method Details
-
getX
public double getX()- Specified by:
getX
in interfaceReadOnlyVector2
-
getY
public double getY()- Specified by:
getY
in interfaceReadOnlyVector2
-
getXf
public float getXf()- Specified by:
getXf
in interfaceReadOnlyVector2
- Returns:
- x as a float, to decrease need for explicit casts.
-
getYf
public float getYf()- Specified by:
getYf
in interfaceReadOnlyVector2
- Returns:
- y as a float, to decrease need for explicit casts.
-
getValue
public double getValue(int index) - Specified by:
getValue
in interfaceReadOnlyVector2
- Parameters:
index
- the field index- Returns:
- x value if index == 0 or y value if index == 1
- Throws:
IllegalArgumentException
- if index is not one of 0, 1.
-
setValue
public void setValue(int index, double value) - Parameters:
index
- which field index in this vector to set.value
- to set to one of x or y.- Throws:
IllegalArgumentException
- if index is not one of 0, 1.
-
toArray
public double[] toArray(double[] store) Stores the double values of this vector in the given double array.- Specified by:
toArray
in interfaceReadOnlyVector2
- Parameters:
store
- if null, a new double[2] array is created.- Returns:
- the double array
- Throws:
ArrayIndexOutOfBoundsException
- if store is not at least length 2.
-
setX
public void setX(double x) Sets the first component of this vector to the given double value.- Parameters:
x
- the abscissa to set
-
setY
public void setY(double y) Sets the second component of this vector to the given double value.- Parameters:
y
- the ordinate to set
-
set
Sets the value of this vector to (x, y)- Parameters:
x
- the abscissa to sety
- the ordinate to set- Returns:
- this vector for chaining
-
set
Sets the value of this vector to the (x, y) values of the provided source vector.- Parameters:
source
- the source vector- Returns:
- this vector for chaining
- Throws:
NullPointerException
- if source is null.
-
zero
Sets the value of this vector to (0, 0)- Returns:
- this vector for chaining
-
add
Adds the given values to those of this vector and returns them in store- Specified by:
add
in interfaceReadOnlyVector2
- Parameters:
x
- the x value to addy
- the y value to addstore
- the vector to store the result in for return. If null, a new vector object is created and returned.- Returns:
- (this.x + x, this.y + y)
-
addLocal
Increments the values of this vector with the given x and y values.- Parameters:
x
- the x value to addy
- the y value to add- Returns:
- this vector for chaining
-
add
Adds the values of the given source vector to those of this vector and returns them in store.- Specified by:
add
in interfaceReadOnlyVector2
- Parameters:
source
- the source vectorstore
- the vector to store the result in for return. If null, a new vector object is created and returned.- Returns:
- (this.x + source.x, this.y + source.y)
- Throws:
NullPointerException
- if source is null.
-
addLocal
Increments the values of this vector with the x and y values of the given vector.- Parameters:
source
- the source vector- Returns:
- this vector for chaining
- Throws:
NullPointerException
- if source is null.
-
subtract
Subtracts the given values from those of this vector and returns them in store.- Specified by:
subtract
in interfaceReadOnlyVector2
- Parameters:
x
- the x value to subtracty
- the y value to subtractstore
- the vector to store the result in for return. If null, a new vector object is created and returned.- Returns:
- (this.x - x, this.y - y)
-
subtractLocal
Decrements the values of this vector by the given x and y values.- Parameters:
x
- the x value to subtracty
- the y value to subtract- Returns:
- this vector for chaining
-
subtract
Subtracts the values of the given source vector from those of this vector and returns them in store.- Specified by:
subtract
in interfaceReadOnlyVector2
- Parameters:
source
- the source vectorstore
- the vector to store the result in for return. If null, a new vector object is created and returned.- Returns:
- (this.x - source.x, this.y - source.y)
- Throws:
NullPointerException
- if source is null.
-
subtractLocal
Decrements the values of this vector by the x and y values from the given source vector.- Parameters:
source
- the source vector- Returns:
- this vector for chaining
- Throws:
NullPointerException
- if source is null.
-
multiply
Multiplies the values of this vector by the given scalar value and returns the result in store.- Specified by:
multiply
in interfaceReadOnlyVector2
- Parameters:
scalar
- the scalar valuestore
- the vector to store the result in for return. If null, a new vector object is created and returned.- Returns:
- a new vector (this.x * scalar, this.y * scalar)
-
multiplyLocal
Internally modifies the values of this vector by multiplying them each by the given scalar value.- Parameters:
scalar
- the scalar value- Returns:
- this vector for chaining
-
multiply
Multiplies the values of this vector by the given scale values and returns the result in store.- Specified by:
multiply
in interfaceReadOnlyVector2
- Parameters:
scale
- the scale valuestore
- the vector to store the result in for return. If null, a new vector object is created and returned.- Returns:
- a new vector (this.x * scale.x, this.y * scale.y)
-
multiplyLocal
Internally modifies the values of this vector by multiplying them each by the values of the given scale.- Parameters:
scale
- the scale value- Returns:
- this vector for chaining
-
multiply
Multiplies the values of this vector by the given scale values and returns the result in store.- Specified by:
multiply
in interfaceReadOnlyVector2
- Parameters:
x
- the x value to multiplyy
- the y value to multiplystore
- the vector to store the result in for return. If null, a new vector object is created and returned.- Returns:
- a new vector (this.x * scale.x, this.y * scale.y)
-
multiplyLocal
Internally modifies the values of this vector by multiplying them each by the values of the given scale.- Parameters:
x
- the x value to multiplyy
- the y value to multiply- Returns:
- this vector for chaining
-
divide
Divides the values of this vector by the given scalar value and returns the result in store.- Specified by:
divide
in interfaceReadOnlyVector2
- Parameters:
scalar
- the scalar valuestore
- the vector to store the result in for return. If null, a new vector object is created and returned.- Returns:
- a new vector (this.x / scalar, this.y / scalar)
-
divideLocal
Internally modifies the values of this vector by dividing them each by the given scalar value.- Parameters:
scalar
- the scalar value- Returns:
- this vector for chaining
- Throws:
ArithmeticException
- if scalar is 0
-
divide
Divides the values of this vector by the given scale values and returns the result in store.- Specified by:
divide
in interfaceReadOnlyVector2
- Parameters:
scale
- the scale valuestore
- the vector to store the result in for return. If null, a new vector object is created and returned.- Returns:
- a new vector (this.x / scale.x, this.y / scale.y)
-
divideLocal
Internally modifies the values of this vector by dividing them each by the values of the given scale.- Parameters:
scale
- the scale value- Returns:
- this vector for chaining
-
divide
Divides the values of this vector by the given scale values and returns the result in store.- Specified by:
divide
in interfaceReadOnlyVector2
- Parameters:
x
- the x valuey
- the y valuestore
- the vector to store the result in for return. If null, a new vector object is created and returned.- Returns:
- a new vector (this.x / scale.x, this.y / scale.y)
-
divideLocal
Internally modifies the values of this vector by dividing them each by the values of the given scale.- Parameters:
x
- the x valuey
- the y value- Returns:
- this vector for chaining
-
scaleAddLocal
Internally modifies this vector by multiplying its values with a given scale value, then adding a given "add" value.- Parameters:
scale
- the value to multiply this vector by.add
- the value to add to the result- Returns:
- this vector for chaining
-
scaleAdd
Scales this vector by multiplying its values with a given scale value, then adding a given "add" value. The result is store in the given store parameter.- Specified by:
scaleAdd
in interfaceReadOnlyVector2
- Parameters:
scale
- the value to multiply by.add
- the value to addstore
- the vector to store the result in for return. If null, a new vector object is created and returned.- Returns:
- the store variable
-
negate
- Specified by:
negate
in interfaceReadOnlyVector2
- Parameters:
store
- the vector to store the result in for return. If null, a new vector object is created and returned.- Returns:
- same as multiply(-1, store)
-
negateLocal
- Returns:
- same as multiplyLocal(-1)
-
normalize
Creates a new unit length vector from this one by dividing by length. If the length is 0, (ie, if the vector is 0, 0) then a new vector (0, 0) is returned.- Specified by:
normalize
in interfaceReadOnlyVector2
- Parameters:
store
- the vector to store the result in for return. If null, a new vector object is created and returned.- Returns:
- a new unit vector (or 0, 0 if this unit is 0 length)
-
normalizeLocal
Converts this vector into a unit vector by dividing it internally by its length. If the length is 0, (ie, if the vector is 0, 0) then no action is taken.- Returns:
- this vector for chaining
-
rotateAroundOrigin
Creates a new vector representing this vector rotated around 0,0 by a specified angle in a given direction.- Specified by:
rotateAroundOrigin
in interfaceReadOnlyVector2
- Parameters:
angle
- in radiansclockwise
- true to rotate in a clockwise directionstore
- the vector to store the result in for return. If null, a new vector object is created and returned.- Returns:
- the new rotated vector
-
rotateAroundOriginLocal
Internally rotates this vector around 0,0 by a specified angle in a given direction.- Parameters:
angle
- in radiansclockwise
- true to rotate in a clockwise direction- Returns:
- this vector for chaining
-
lerp
Performs a linear interpolation between this vector and the given end vector, using the given scalar as a percent. iow, if changeAmnt is closer to 0, the result will be closer to the current value of this vector and if it is closer to 1, the result will be closer to the end value. The result is returned as a new vector object.- Specified by:
lerp
in interfaceReadOnlyVector2
- Parameters:
endVec
- the end vectorscalar
- the scalar valuestore
- the vector to store the result in for return. If null, a new vector object is created and returned.- Returns:
- a new vector as described above.
- Throws:
NullPointerException
- if endVec is null.
-
lerpLocal
Performs a linear interpolation between this vector and the given end vector, using the given scalar as a percent. iow, if changeAmnt is closer to 0, the result will be closer to the current value of this vector and if it is closer to 1, the result will be closer to the end value. The result is stored back in this vector.- Parameters:
endVec
- the end vectorscalar
- the scalar value- Returns:
- this vector for chaining
- Throws:
NullPointerException
- if endVec is null.
-
lerp
public static Vector2 lerp(ReadOnlyVector2 beginVec, ReadOnlyVector2 endVec, double scalar, Vector2 store) Performs a linear interpolation between the given begin and end vectors, using the given scalar as a percent. iow, if changeAmnt is closer to 0, the result will be closer to the begin value and if it is closer to 1, the result will be closer to the end value. The result is returned as a new vector object.- Parameters:
beginVec
- the begin vectorendVec
- the end vectorscalar
- the scalar as a percent.store
- the vector to store the result in for return. If null, a new vector object is created and returned.- Returns:
- a new vector as described above.
- Throws:
NullPointerException
- if beginVec or endVec are null.
-
lerpLocal
Performs a linear interpolation between the given begin and end vectors, using the given scalar as a percent. iow, if changeAmnt is closer to 0, the result will be closer to the begin value and if it is closer to 1, the result will be closer to the end value. The result is stored back in this vector.- Parameters:
beginVec
- the begin vectorendVec
- the end vectorscalar
- the scalar as a percent.- Returns:
- this vector for chaining
- Throws:
NullPointerException
- if beginVec or endVec are null.
-
length
public double length()- Specified by:
length
in interfaceReadOnlyVector2
- Returns:
- the magnitude of this vector, or the distance between the origin (0, 0) and the point described by (x, y). Basically sqrt(x^2 + y^2)
-
lengthSquared
public double lengthSquared()- Specified by:
lengthSquared
in interfaceReadOnlyVector2
- Returns:
- the squared magnitude of this vector. (x^2 + y^2)
-
distanceSquared
public double distanceSquared(double x, double y) - Specified by:
distanceSquared
in interfaceReadOnlyVector2
- Parameters:
x
- the x valuey
- the y value- Returns:
- the squared distance between the point described by this vector and the given x, y point. When comparing the relative distance between two points it is usually sufficient to compare the squared distances, thus avoiding an expensive square root operation.
-
distanceSquared
- Specified by:
distanceSquared
in interfaceReadOnlyVector2
- Parameters:
destination
- the destination- Returns:
- the squared distance between the point described by this vector and the given destination point. When comparing the relative distance between two points it is usually sufficient to compare the squared distances, thus avoiding an expensive square root operation.
- Throws:
NullPointerException
- if destination is null.
-
distance
public double distance(double x, double y) - Specified by:
distance
in interfaceReadOnlyVector2
- Parameters:
x
- the x valuey
- the y value- Returns:
- the distance between the point described by this vector and the given x, y point.
-
distance
- Specified by:
distance
in interfaceReadOnlyVector2
- Parameters:
destination
- the destination- Returns:
- the distance between the point described by this vector and the given destination point.
- Throws:
NullPointerException
- if destination is null.
-
dot
public double dot(double x, double y) - Specified by:
dot
in interfaceReadOnlyVector2
- Parameters:
x
- the x valuey
- the y value- Returns:
- the dot product of this vector with the given x, y values.
-
dot
- Specified by:
dot
in interfaceReadOnlyVector2
- Parameters:
vec
- the vector- Returns:
- the dot product of this vector with the x, y values of the given vector.
- Throws:
NullPointerException
- if vec is null.
-
getPolarAngle
public double getPolarAngle()- Specified by:
getPolarAngle
in interfaceReadOnlyVector2
- Returns:
- the angle - in radians [-pi, pi) - represented by this Vector2 as expressed by a conversion from
rectangular coordinates (
x
,y
) to polar coordinates (r, theta ).
-
angleBetween
- Specified by:
angleBetween
in interfaceReadOnlyVector2
- Parameters:
otherVector
- the "destination" unit vector- Returns:
- the angle (in radians) required to rotate a ray represented by this vector to lie co-linear to a ray described by the given vector. It is assumed that both this vector and the given vector are unit vectors (normalized).
- Throws:
NullPointerException
- if otherVector is null.
-
smallestAngleBetween
- Specified by:
smallestAngleBetween
in interfaceReadOnlyVector2
- Parameters:
otherVector
- a unit vector to find the angle against- Returns:
- the minimum angle (in radians) between two vectors. It is assumed that both this vector and the given vector are unit vectors (normalized).
- Throws:
NullPointerException
- if otherVector is null.
-
isValid
Check a vector... if it is null or its doubles are NaN or infinite, return false. Else return true.- Parameters:
vector
- the vector to check- Returns:
- true or false as stated above.
-
toString
-
hashCode
public int hashCode() -
equals
Compares this object against the specified object -
clone
- Specified by:
clone
in interfaceReadOnlyVector2
- Overrides:
clone
in classObject
-
getClassTag
- Specified by:
getClassTag
in interfaceSavable
-
write
- Specified by:
write
in interfaceSavable
- Throws:
IOException
-
read
- Specified by:
read
in interfaceSavable
- Throws:
IOException
-
readExternal
Used with serialization. Not to be called manually.- Specified by:
readExternal
in interfaceExternalizable
- Parameters:
in
- ObjectInput- Throws:
IOException
- if something wrong occurs while readingClassNotFoundException
- if a class is not found
-
writeExternal
Used with serialization. Not to be called manually.- Specified by:
writeExternal
in interfaceExternalizable
- Parameters:
out
- ObjectOutput- Throws:
IOException
- if something wrong occurs while writing
-
fetchTempInstance
- Returns:
- An instance of Vector2 that is intended for temporary use in calculations and so forth. Multiple calls to the method should return instances of this class that are not currently in use.
-
releaseTempInstance
Releases a Vector2 back to be used by a future call to fetchTempInstance. TAKE CARE: this Vector2 object should no longer have other classes referencing it or "Bad Things" will happen.- Parameters:
vec
- the Vector2 to release.
-