Package arc.math.geom
Class Vec3
java.lang.Object
arc.math.geom.Vec3
Encapsulates a 3D vector. Allows chaining operations by returning a reference to itself in all modification methods.
-
Field Summary
-
Constructor Summary
ConstructorDescriptionVec3()
Constructs a vector at (0,0,0)Vec3
(double x, double y, double z) Vec3
(float[] values) Creates a vector from the given array.Vec3
(float x, float y, float z) Creates a vector with the given componentsCreates a vector from the given vector and z-componentCreates a vector from the given vector -
Method Summary
Modifier and TypeMethodDescriptionadd
(float values) Adds the given value to all three components of the vector.add
(float x, float y, float z) Adds the given vector to this componentAdds the given vector to this vectorfloat
float
clamp
(float min, float max) Clamps this vector's length to given min and max valuescpy()
crs
(float x, float y, float z) Sets this vector to the cross product between it and the other vector.Sets this vector to the cross product between it and the other vector.Inverse of scl()float
dot
(float x, float y, float z) Returns the dot product between this and the given vector.static float
dot
(float x1, float y1, float z1, float x2, float y2, float z2) float
float
dst
(float x, float y, float z) static float
dst
(float x1, float y1, float z1, float x2, float y2, float z2) float
float
dst2
(float x, float y, float z) Returns the squared distance between this point and the given pointstatic float
dst2
(float x1, float y1, float z1, float x2, float y2, float z2) float
This method is faster thanVector.dst(Vector)
because it avoids calculating a square root.boolean
epsilonEquals
(float x, float y, float z) Compares this vector with the other vector using Mathf.FLOAT_ROUNDING_ERROR for fuzzy equality testingboolean
epsilonEquals
(float x, float y, float z, float epsilon) Compares this vector with the other vector, using the supplied epsilon for fuzzy equality testing.boolean
epsilonEquals
(Vec3 other) Compares this vector with the other vector using Mathf.FLOAT_ROUNDING_ERROR for fuzzy equality testingboolean
epsilonEquals
(Vec3 other, float epsilon) Compares this vector with the other vector, using the supplied epsilon for fuzzy equality testing.boolean
fromString
(String v) Sets thisVec3
to the value represented by the specified string according to the format oftoString()
.int
hashCode()
boolean
hasOppositeDirection
(Vec3 vector) boolean
hasSameDirection
(Vec3 vector) boolean
interpolate
(Vec3 target, float alpha, Interp interpolator) Interpolates between this vector and the given target vector by alpha (within range [0,1]) using the given Interpolation method.boolean
isCollinear
(Vec3 other) boolean
isCollinear
(Vec3 other, float epsilon) boolean
isCollinearOpposite
(Vec3 other) boolean
isCollinearOpposite
(Vec3 other, float epsilon) boolean
boolean
boolean
isPerpendicular
(Vec3 vector) boolean
isPerpendicular
(Vec3 vector, float epsilon) boolean
isUnit()
boolean
isUnit
(float margin) boolean
isZero()
boolean
isZero
(float margin) float
len()
static float
len
(float x, float y, float z) float
len2()
This method is faster thanVector.len()
because it avoids calculating a square root.static float
len2
(float x, float y, float z) Linearly interpolates between this vector and the target vector by alpha which is in the range [0,1].limit
(float limit) Limits the length of this vector, based on the desired maximum length.limit2
(float limit2) Limits the length of this vector, based on the desired maximum length squared.Left-multiplies the vector by the given matrix.mul4x3
(float[] matrix) Left-multiplies the vector by the given 4x3 column major matrix.First scale a supplied vector, then add it to this vector.First scale a supplied vector, then add it to this vector.nor()
Normalizes this vector.Rotates this vector by the given angle in degrees around the given axis.scl
(float scalar) Scales this vector by a scalarscl
(float vx, float vy, float vz) Scales this vector by the given valuesScales this vector by another vectorset
(float[] values) Sets the components from the array.set
(float[] values, int offset) set
(float x, float y, float z) Sets the vector to the given componentsSets the components of the given vector and z-componentSets this vector from the given vectorsetFromSpherical
(float azimuthalAngle, float polarAngle) Sets the components from the given spherical coordinatesetLength
(float len) Sets the length of this vector.setLength2
(float len2) Sets the length of this vector, based on the square of the desired length.Sets this vector to the unit vector with a random directionsetToRandomDirection
(Rand rand) setZero()
Sets the components of this vector to 0Spherically interpolates between this vector and the target vector by alpha which is in the range [0,1].sub
(float value) Subtracts the given value from all components of this vectorsub
(float x, float y, float z) Subtracts the other vector from this vector.Subtracts the given vector from this vector.toString()
Converts thisVec3
to a string in the format(x,y,z)
.Multiplies the vector by the transpose of the given matrix.boolean
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface arc.math.geom.Vector
minus, plus, times, unaryMinus
-
Field Details
-
X
-
Y
-
Z
-
Zero
-
x
public float xthe x-component of this vector -
y
public float ythe y-component of this vector -
z
public float zthe z-component of this vector
-
-
Constructor Details
-
Vec3
public Vec3()Constructs a vector at (0,0,0) -
Vec3
public Vec3(float x, float y, float z) Creates a vector with the given components- Parameters:
x
- The x-componenty
- The y-componentz
- The z-component
-
Vec3
public Vec3(double x, double y, double z) -
Vec3
Creates a vector from the given vector- Parameters:
vector
- The vector
-
Vec3
public Vec3(float[] values) Creates a vector from the given array. The array must have at least 3 elements.- Parameters:
values
- The array
-
Vec3
Creates a vector from the given vector and z-component- Parameters:
vector
- The vectorz
- The z-component
-
-
Method Details
-
len
public static float len(float x, float y, float z) - Returns:
- The euclidean length
-
len2
public static float len2(float x, float y, float z) - Returns:
- The squared euclidean length
-
dst
public static float dst(float x1, float y1, float z1, float x2, float y2, float z2) - Returns:
- The euclidean distance between the two specified vectors
-
dst2
public static float dst2(float x1, float y1, float z1, float x2, float y2, float z2) - Returns:
- the squared distance between the given points
-
dot
public static float dot(float x1, float y1, float z1, float x2, float y2, float z2) - Returns:
- The dot product between the two vectors
-
set
Sets the vector to the given components- Parameters:
x
- The x-componenty
- The y-componentz
- The z-component- Returns:
- this vector for chaining
-
div
Description copied from interface:Vector
Inverse of scl() -
set
Description copied from interface:Vector
Sets this vector from the given vector -
set
Sets the components from the array. The array must have at least 3 elements- Parameters:
values
- The array- Returns:
- this vector for chaining
-
set
-
set
Sets the components of the given vector and z-component- Parameters:
vector
- The vectorz
- The z-component- Returns:
- This vector for chaining
-
setFromSpherical
Sets the components from the given spherical coordinate- Parameters:
azimuthalAngle
- The angle between x-axis in radians [0, 2pi]polarAngle
- The angle between z-axis in radians [0, pi]- Returns:
- This vector for chaining
-
setToRandomDirection
Description copied from interface:Vector
Sets this vector to the unit vector with a random direction- Specified by:
setToRandomDirection
in interfaceVector<Vec3>
- Returns:
- This vector for chaining
-
setToRandomDirection
-
cpy
-
add
Description copied from interface:Vector
Adds the given vector to this vector -
cpy
-
add
-
sub
-
add
Adds the given vector to this component- Parameters:
x
- The x-component of the other vectory
- The y-component of the other vectorz
- The z-component of the other vector- Returns:
- This vector for chaining.
-
add
Adds the given value to all three components of the vector.- Parameters:
values
- The value- Returns:
- This vector for chaining
-
sub
Description copied from interface:Vector
Subtracts the given vector from this vector. -
sub
Subtracts the other vector from this vector.- Parameters:
x
- The x-component of the other vectory
- The y-component of the other vectorz
- The z-component of the other vector- Returns:
- This vector for chaining
-
sub
Subtracts the given value from all components of this vector- Parameters:
value
- The value- Returns:
- This vector for chaining
-
scl
Description copied from interface:Vector
Scales this vector by a scalar -
scl
Description copied from interface:Vector
Scales this vector by another vector -
scl
Scales this vector by the given values- Parameters:
vx
- X valuevy
- Y valuevz
- Z value- Returns:
- This vector for chaining
-
mulAdd
Description copied from interface:Vector
First scale a supplied vector, then add it to this vector. -
mulAdd
Description copied from interface:Vector
First scale a supplied vector, then add it to this vector. -
len
public float len() -
len2
public float len2()Description copied from interface:Vector
This method is faster thanVector.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. -
idt
- Parameters:
vector
- The other vector- Returns:
- Whether this and the other vector are equal
-
dst
-
dst
public float dst(float x, float y, float z) - Returns:
- the distance between this point and the given point
-
dst2
Description copied from interface:Vector
This method is faster thanVector.dst(Vector)
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 float dst2(float x, float y, float z) Returns the squared distance between this point and the given point- Parameters:
x
- The x-component of the other pointy
- The y-component of the other pointz
- The z-component of the other point- Returns:
- The squared distance
-
within
-
nor
Description copied from interface:Vector
Normalizes this vector. Does nothing if it is zero. -
dot
-
angleRad
- Returns:
- the angle to the other vector, in radians.
-
angle
- Returns:
- the angle to the other vector, in degrees.
-
dot
public float dot(float x, float y, float z) Returns the dot product between this and the given vector.- Parameters:
x
- The x-component of the other vectory
- The y-component of the other vectorz
- The z-component of the other vector- Returns:
- The dot product
-
crs
Sets this vector to the cross product between it and the other vector.- Parameters:
vector
- The other vector- Returns:
- This vector for chaining
-
crs
Sets this vector to the cross product between it and the other vector.- Parameters:
x
- The x-component of the other vectory
- The y-component of the other vectorz
- The z-component of the other vector- Returns:
- This vector for chaining
-
mul4x3
Left-multiplies the vector by the given 4x3 column major matrix. The matrix should be composed by a 3x3 matrix representing rotation and scale plus a 1x3 matrix representing the translation.- Parameters:
matrix
- The matrix- Returns:
- This vector for chaining
-
mul
Left-multiplies the vector by the given matrix.- Parameters:
matrix
- The matrix- Returns:
- This vector for chaining
-
traMul
Multiplies the vector by the transpose of the given matrix.- Parameters:
matrix
- The matrix- Returns:
- This vector for chaining
-
rotate
Rotates this vector by the given angle in degrees around the given axis.- Parameters:
axis
- the axisdegrees
- the angle in degrees- Returns:
- This vector for chaining
-
isUnit
public boolean isUnit() -
isUnit
public boolean isUnit(float margin) -
isZero
public boolean isZero() -
isZero
public boolean isZero(float margin) -
isOnLine
-
isOnLine
-
isCollinear
- Specified by:
isCollinear
in interfaceVector<Vec3>
- Returns:
- true if this vector is collinear with the other vector (
Vector.isOnLine(Vector, float)
&&Vector.hasSameDirection(Vector)
).
-
isCollinear
- Specified by:
isCollinear
in interfaceVector<Vec3>
- Returns:
- true if this vector is collinear with the other vector (
Vector.isOnLine(Vector)
&&Vector.hasSameDirection(Vector)
).
-
isCollinearOpposite
- Specified by:
isCollinearOpposite
in interfaceVector<Vec3>
- Returns:
- true if this vector is opposite collinear with the other vector (
Vector.isOnLine(Vector, float)
&&Vector.hasOppositeDirection(Vector)
).
-
isCollinearOpposite
- Specified by:
isCollinearOpposite
in interfaceVector<Vec3>
- Returns:
- true if this vector is opposite collinear with the other vector (
Vector.isOnLine(Vector)
&&Vector.hasOppositeDirection(Vector)
).
-
isPerpendicular
- Specified by:
isPerpendicular
in interfaceVector<Vec3>
- Returns:
- Whether this vector is perpendicular with the other vector. True if the dot product is 0.
-
isPerpendicular
- Specified by:
isPerpendicular
in interfaceVector<Vec3>
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 interfaceVector<Vec3>
- 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 interfaceVector<Vec3>
- Returns:
- Whether this vector has opposite direction compared to the other vector. True if the normalized dot product is < 0.
-
lerp
Description copied from interface:Vector
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:Vector
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 interfaceVector<Vec3>
- Parameters:
target
- The target vectoralpha
- The interpolation coefficientinterpolator
- An Interpolation object describing the used interpolation method- Returns:
- This vector for chaining.
-
slerp
Spherically interpolates between this vector and the target vector by alpha which is in the range [0,1]. The result is stored in this vector.- Parameters:
target
- The target vectoralpha
- The interpolation coefficient- Returns:
- This vector for chaining.
-
toString
Converts thisVec3
to a string in the format(x,y,z)
. -
fromString
Sets thisVec3
to the value represented by the specified string according to the format oftoString()
.- Parameters:
v
- the string.- Returns:
- this vector for chaining
-
limit
Description copied from interface:Vector
Limits the length of this vector, based on the desired maximum length. -
limit2
Description copied from interface:Vector
Limits the length of this vector, based on the desired maximum length squared. This method is slightly faster than limit(). -
setLength
Description copied from interface:Vector
Sets the length of this vector. Does nothing if this vector is zero. -
setLength2
Description copied from interface:Vector
Sets the length of this vector, based on the square of the desired length. Does nothing if this vector is zero. This method is slightly faster than setLength().- Specified by:
setLength2
in interfaceVector<Vec3>
- Parameters:
len2
- desired square of the length for this vector- Returns:
- this vector for chaining
- See Also:
-
clamp
Description copied from interface:Vector
Clamps this vector's length to given min and max values -
hashCode
public int hashCode() -
equals
-
epsilonEquals
Description copied from interface:Vector
Compares this vector with the other vector, using the supplied epsilon for fuzzy equality testing.- Specified by:
epsilonEquals
in interfaceVector<Vec3>
- Returns:
- whether the vectors have fuzzy equality.
-
epsilonEquals
public boolean epsilonEquals(float x, float y, float z, float epsilon) Compares this vector with the other vector, using the supplied epsilon for fuzzy equality testing.- Returns:
- whether the vectors are the same.
-
epsilonEquals
Compares this vector with the other vector using Mathf.FLOAT_ROUNDING_ERROR for fuzzy equality testing- Parameters:
other
- other vector to compare- Returns:
- true if vector are equal, otherwise false
-
epsilonEquals
public boolean epsilonEquals(float x, float y, float z) Compares this vector with the other vector using Mathf.FLOAT_ROUNDING_ERROR for fuzzy equality testing- Parameters:
x
- x component of the other vector to comparey
- y component of the other vector to comparez
- z component of the other vector to compare- Returns:
- true if vector are equal, otherwise false
-
setZero
Description copied from interface:Vector
Sets the components of this vector to 0
-