Package gaiasky.util.math
Class Vector2d
java.lang.Object
gaiasky.util.math.Vector2d
public class Vector2d extends java.lang.Object implements java.io.Serializable, Vectord<Vector2d>
Encapsulates a 2D vector. Allows chaining methods by returning a reference to itself
- See Also:
- Serialized Form
-
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and Type Method Description Vector2d
add(double x, double y)
Adds the given components to this vectorVector2d
add(Vector2d v)
Adds the given vector to this vectordouble
angle()
Vector2d
clamp(double min, double max)
Clamps this vector's length to given min and max valuesVector2d
cpy()
double
crs(double x, double y)
Calculates the 2D cross product between this and the given vector.double
crs(Vector2d v)
Calculates the 2D cross product between this and the given vector.double
dot(double ox, double oy)
static double
dot(double x1, double y1, double x2, double y2)
double
dot(Vector2d v)
double
dst(double x, double y)
static double
dst(double x1, double y1, double x2, double y2)
double
dst(Vector2d v)
double
dst2(double x, double y)
static double
dst2(double x1, double y1, double x2, double y2)
double
dst2(Vector2d v)
This method is faster thanVectord.dst(Vectord)
because it avoids calculating a square root.boolean
epsilonEquals(double x, double y, double epsilon)
Compares this vector with the other vector, using the supplied epsilon for fuzzy equality testing.boolean
epsilonEquals(Vector2d other, double epsilon)
Compares this vector with the other vector, using the supplied epsilon for fuzzy equality testing.double
getAngleRad()
boolean
hasOppositeDirection(Vector2d vector)
boolean
hasSameDirection(Vector2d vector)
Vector2d
interpolate(Vector2d target, double alpha, Interpolationd interpolation)
Interpolates between this vector and the given target vector by alpha (within range [0,1]) using the given Interpolation method.boolean
isCollinear(Vector2d other)
boolean
isCollinear(Vector2d other, double epsilon)
boolean
isCollinearOpposite(Vector2d other)
boolean
isCollinearOpposite(Vector2d other, double epsilon)
boolean
isOnLine(Vector2d other)
boolean
isOnLine(Vector2d other, double epsilon)
boolean
isPerpendicular(Vector2d vector)
boolean
isPerpendicular(Vector2d vector, double epsilon)
boolean
isUnit()
boolean
isUnit(double margin)
boolean
isZero()
boolean
isZero(double margin)
double
len()
static double
len(double x, double y)
double
len2()
This method is faster thanVectord.len()
because it avoids calculating a square root.static double
len2(double x, double y)
Vector2d
lerp(Vector2d target, double alpha)
Linearly interpolates between this vector and the target vector by alpha which is in the range [0,1].Vector2d
limit(double limit)
Limits the length of this vector, based on the desired maximum length.Vector2d
limit2(double limit2)
Limits the length of this vector, based on the desired maximum length squared.Vector2d
mul(com.badlogic.gdx.math.Matrix3 mat)
Left-multiplies this vector by the given matrixVector2d
mulAdd(Vector2d vec, double scalar)
First scale a supplied vector, then add it to this vector.Vector2d
mulAdd(Vector2d vec, Vector2d mulVec)
First scale a supplied vector, then add it to this vector.Vector2d
nor()
Normalizes this vector.Vector2d
rotate(double degrees)
Rotates the Vector2d by the given angle, counter-clockwise assuming the y-axis points up.Vector2d
rotate90(int dir)
Rotates the Vector2d by 90 degrees in the specified direction, where >= 0 is counter-clockwise and < 0 is clockwise.Vector2d
rotateRad(double radians)
Rotates the Vector2d by the given angle, counter-clockwise assuming the y-axis points up.Vector2d
scl(double scalar)
Scales this vector by a scalarVector2d
scl(double x, double y)
Multiplies this vector by a scalarVector2d
scl(Vector2d v)
Scales this vector by another vectorVector2d
set(double[] vals)
Vector2d
set(double x, double y)
Sets the components of this vectorVector2d
set(Vector2d v)
Sets this vector from the given vectorVector2d
setAngle(double degrees)
Sets the angle of the vector in degrees relative to the x-axis, towards the positive y-axis (typically counter-clockwise).Vector2d
setAngleRad(double radians)
Sets the angle of the vector in radians relative to the x-axis, towards the positive y-axis (typically counter-clockwise).Vector2d
setLength(double len)
Sets the length of this vector.Vector2d
setLength2(double len2)
Sets the length of this vector, based on the square of the desired length.Vector2d
setToRandomDirection()
Sets this vector to the unit vector with a random directionVector2d
setZero()
Sets the components of this vector to 0Vector2d
sub(double x, double y)
Substracts the other vector from this vector.Vector2d
sub(Vector2d v)
Subtracts the given vector from this vector.java.lang.String
toString()
double[]
values()
double
x()
double
y()
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Field Details
-
X
-
Y
-
Zero
-
x
public double xthe x-component of this vector -
y
public double ythe y-component of this vector
-
-
Constructor Details
-
Vector2d
public Vector2d()Constructs a new vector at (0,0) -
Vector2d
public Vector2d(double x, double y)Constructs a vector with the given components- Parameters:
x
- The x-componenty
- The y-component
-
Vector2d
Constructs a vector from the given vector- Parameters:
v
- The vector
-
-
Method Details
-
x
public double x() -
y
public double y() -
cpy
-
len
public static double len(double x, double y) -
len
public double len() -
len2
public static double len2(double x, double y) -
len2
public double len2()Description copied from interface:Vectord
This method is faster thanVectord.len()
because it avoids calculating a square root. It is useful for comparisons, but not for getting exact lengths, as the return value is the square of the actual length. -
set
Description copied from interface:Vectord
Sets this vector from the given vector -
set
-
set
Sets the components of this vector- Parameters:
x
- The x-componenty
- The y-component- Returns:
- This vector for chaining
-
sub
Description copied from interface:Vectord
Subtracts the given vector from this vector. -
sub
Substracts the other vector from this vector.- Parameters:
x
- The x-component of the other vectory
- The y-component of the other vector- Returns:
- This vector for chaining
-
nor
Description copied from interface:Vectord
Normalizes this vector. Does nothing if it is zero. -
add
Description copied from interface:Vectord
Adds the given vector to this vector -
add
Adds the given components to this vector- Parameters:
x
- The x-componenty
- The y-component- Returns:
- This vector for chaining
-
dot
public static double dot(double x1, double y1, double x2, double y2) -
dot
-
dot
public double dot(double ox, double oy) -
scl
Description copied from interface:Vectord
Scales this vector by a scalar -
scl
Multiplies this vector by a scalar- Returns:
- This vector for chaining
-
scl
Description copied from interface:Vectord
Scales this vector by another vector -
mulAdd
Description copied from interface:Vectord
First scale a supplied vector, then add it to this vector. -
mulAdd
Description copied from interface:Vectord
First scale a supplied vector, then add it to this vector. -
setZero
Description copied from interface:Vectord
Sets the components of this vector to 0 -
dst
public static double dst(double x1, double y1, double x2, double y2) -
dst
-
dst
public double dst(double x, double y)- Parameters:
x
- The x-component of the other vectory
- The y-component of the other vector- Returns:
- the distance between this and the other vector
-
dst2
public static double dst2(double x1, double y1, double x2, double y2) -
dst2
Description copied from interface:Vectord
This method is faster thanVectord.dst(Vectord)
because it avoids calculating a square root. It is useful for comparisons, but not for getting accurate distances, as the return value is the square of the actual distance. -
dst2
public double dst2(double x, double y)- Parameters:
x
- The x-component of the other vectory
- The y-component of the other vector- Returns:
- the squared distance between this and the other vector
-
limit
Description copied from interface:Vectord
Limits the length of this vector, based on the desired maximum length. -
limit2
Description copied from interface:Vectord
Limits the length of this vector, based on the desired maximum length squared. This method is slightly faster than limit().- Specified by:
limit2
in interfaceVectord<Vector2d>
- Parameters:
limit2
- squared desired maximum length for this vector- Returns:
- this vector for chaining
- See Also:
Vectord.len2()
-
setLength
Description copied from interface:Vectord
Sets the length of this vector. Does nothing is this vector is zero. -
setLength2
Description copied from interface:Vectord
Sets the length of this vector, based on the square of the desired length. Does nothing is this vector is zero. This method is slightly faster than setLength().- Specified by:
setLength2
in interfaceVectord<Vector2d>
- Parameters:
len2
- desired square of the length for this vector- Returns:
- this vector for chaining
- See Also:
Vectord.len2()
-
clamp
Description copied from interface:Vectord
Clamps this vector's length to given min and max values -
toString
public java.lang.String toString()- Overrides:
toString
in classjava.lang.Object
-
mul
Left-multiplies this vector by the given matrix- Parameters:
mat
- the matrix- Returns:
- this vector
-
crs
Calculates the 2D cross product between this and the given vector.- Parameters:
v
- the other vector- Returns:
- the cross product
-
crs
public double crs(double x, double y)Calculates the 2D cross product between this and the given vector.- Parameters:
x
- the x-coordinate of the other vectory
- the y-coordinate of the other vector- Returns:
- the cross product
-
angle
public double angle()- Returns:
- the angle in degrees of this vector (point) relative to the x-axis. Angles are towards the positive y-axis (typically counter-clockwise) and between 0 and 360.
-
getAngleRad
public double getAngleRad()- Returns:
- the angle in radians of this vector (point) relative to the x-axis. Angles are towards the positive y-axis. (typically counter-clockwise)
-
setAngle
Sets the angle of the vector in degrees relative to the x-axis, towards the positive y-axis (typically counter-clockwise).- Parameters:
degrees
- The angle in degrees to set.
-
setAngleRad
Sets the angle of the vector in radians relative to the x-axis, towards the positive y-axis (typically counter-clockwise).- Parameters:
radians
- The angle in radians to set.
-
rotate
Rotates the Vector2d by the given angle, counter-clockwise assuming the y-axis points up.- Parameters:
degrees
- the angle in degrees
-
rotateRad
Rotates the Vector2d by the given angle, counter-clockwise assuming the y-axis points up.- Parameters:
radians
- the angle in radians
-
values
public double[] values() -
rotate90
Rotates the Vector2d by 90 degrees in the specified direction, where >= 0 is counter-clockwise and < 0 is clockwise. -
lerp
Description copied from interface:Vectord
Linearly interpolates between this vector and the target vector by alpha which is in the range [0,1]. The result is stored in this vector. -
interpolate
Description copied from interface:Vectord
Interpolates between this vector and the given target vector by alpha (within range [0,1]) using the given Interpolation method. the result is stored in this vector.- Specified by:
interpolate
in interfaceVectord<Vector2d>
- Parameters:
target
- The target vectoralpha
- The interpolation coefficientinterpolation
- An Interpolation object describing the used interpolation method- Returns:
- This vector for chaining.
-
setToRandomDirection
Description copied from interface:Vectord
Sets this vector to the unit vector with a random direction- Specified by:
setToRandomDirection
in interfaceVectord<Vector2d>
- Returns:
- This vector for chaining
-
epsilonEquals
Description copied from interface:Vectord
Compares this vector with the other vector, using the supplied epsilon for fuzzy equality testing.- Specified by:
epsilonEquals
in interfaceVectord<Vector2d>
- Returns:
- whether the vectors have fuzzy equality.
-
epsilonEquals
public boolean epsilonEquals(double x, double y, double epsilon)Compares this vector with the other vector, using the supplied epsilon for fuzzy equality testing.- Returns:
- whether the vectors are the same.
-
isUnit
public boolean isUnit() -
isUnit
public boolean isUnit(double margin) -
isZero
public boolean isZero() -
isZero
public boolean isZero(double margin) -
isOnLine
-
isOnLine
-
isCollinear
- Specified by:
isCollinear
in interfaceVectord<Vector2d>
- Returns:
- true if this vector is collinear with the other vector (
Vectord.isOnLine(Vectord, double)
&&Vectord.hasSameDirection(Vectord)
).
-
isCollinear
- Specified by:
isCollinear
in interfaceVectord<Vector2d>
- Returns:
- true if this vector is collinear with the other vector (
Vectord.isOnLine(Vectord)
&&Vectord.hasSameDirection(Vectord)
).
-
isCollinearOpposite
- Specified by:
isCollinearOpposite
in interfaceVectord<Vector2d>
- Returns:
- true if this vector is opposite collinear with the other vector (
Vectord.isOnLine(Vectord, double)
&&Vectord.hasOppositeDirection(Vectord)
).
-
isCollinearOpposite
- Specified by:
isCollinearOpposite
in interfaceVectord<Vector2d>
- Returns:
- true if this vector is opposite collinear with the other vector (
Vectord.isOnLine(Vectord)
&&Vectord.hasOppositeDirection(Vectord)
).
-
isPerpendicular
- Specified by:
isPerpendicular
in interfaceVectord<Vector2d>
- Returns:
- Whether this vector is perpendicular with the other vector. True if the dot product is 0.
-
isPerpendicular
- Specified by:
isPerpendicular
in interfaceVectord<Vector2d>
epsilon
- a positive small number close to zero- Returns:
- Whether this vector is perpendicular with the other vector. True if the dot product is 0.
-
hasSameDirection
- Specified by:
hasSameDirection
in interfaceVectord<Vector2d>
- Returns:
- Whether this vector has similar direction compared to the other vector. True if the normalized dot product is > 0.
-
hasOppositeDirection
- Specified by:
hasOppositeDirection
in interfaceVectord<Vector2d>
- Returns:
- Whether this vector has opposite direction compared to the other vector. True if the normalized dot product is < 0.
-