public class Vector extends Object implements Cloneable, ConfigurationSerializable
clone()
in order to get a copy.Modifier and Type | Field and Description |
---|---|
protected double |
x |
protected double |
y |
protected double |
z |
Constructor and Description |
---|
Vector()
Construct the vector with all components as 0.
|
Vector(double x,
double y,
double z)
Construct the vector with provided double components.
|
Vector(float x,
float y,
float z)
Construct the vector with provided float components.
|
Vector(int x,
int y,
int z)
Construct the vector with provided integer components.
|
Modifier and Type | Method and Description |
---|---|
Vector |
add(Vector vec)
Adds a vector to this one
|
float |
angle(Vector other)
Gets the angle between this vector and another in radians.
|
void |
checkFinite()
Check if each component of this Vector is finite.
|
Vector |
clone()
Get a new vector.
|
Vector |
copy(Vector vec)
Copies another vector
|
Vector |
crossProduct(Vector o)
Calculates the cross product of this vector with another.
|
static Vector |
deserialize(Map<String,Object> args) |
double |
distance(Vector o)
Get the distance between this vector and another.
|
double |
distanceSquared(Vector o)
Get the squared distance between this vector and another.
|
Vector |
divide(Vector vec)
Divides the vector by another.
|
double |
dot(Vector other)
Calculates the dot product of this vector with another.
|
boolean |
equals(Object obj)
Checks to see if two objects are equal.
|
int |
getBlockX()
Gets the floored value of the X component, indicating the block that
this vector is contained with.
|
int |
getBlockY()
Gets the floored value of the Y component, indicating the block that
this vector is contained with.
|
int |
getBlockZ()
Gets the floored value of the Z component, indicating the block that
this vector is contained with.
|
Vector |
getCrossProduct(Vector o)
Calculates the cross product of this vector with another without mutating
the original.
|
static double |
getEpsilon()
Get the threshold used for equals().
|
static Vector |
getMaximum(Vector v1,
Vector v2)
Gets the maximum components of two vectors.
|
Vector |
getMidpoint(Vector other)
Gets a new midpoint vector between this vector and another.
|
static Vector |
getMinimum(Vector v1,
Vector v2)
Gets the minimum components of two vectors.
|
static Vector |
getRandom()
Gets a random vector with components having a random value between 0
and 1.
|
double |
getX()
Gets the X component.
|
double |
getY()
Gets the Y component.
|
double |
getZ()
Gets the Z component.
|
int |
hashCode()
Returns a hash code for this vector
|
boolean |
isInAABB(Vector min,
Vector max)
Returns whether this vector is in an axis-aligned bounding box.
|
boolean |
isInSphere(Vector origin,
double radius)
Returns whether this vector is within a sphere.
|
boolean |
isNormalized()
Returns if a vector is normalized
|
double |
length()
Gets the magnitude of the vector, defined as sqrt(x^2+y^2+z^2).
|
double |
lengthSquared()
Gets the magnitude of the vector squared.
|
Vector |
midpoint(Vector other)
Sets this vector to the midpoint between this vector and another.
|
Vector |
multiply(double m)
Performs scalar multiplication, multiplying all components with a
scalar.
|
Vector |
multiply(float m)
Performs scalar multiplication, multiplying all components with a
scalar.
|
Vector |
multiply(int m)
Performs scalar multiplication, multiplying all components with a
scalar.
|
Vector |
multiply(Vector vec)
Multiplies the vector by another.
|
Vector |
normalize()
Converts this vector to a unit vector (a vector with length of 1).
|
Vector |
rotateAroundAxis(Vector axis,
double angle)
Rotates the vector around a given arbitrary axis in 3 dimensional space.
|
Vector |
rotateAroundNonUnitAxis(Vector axis,
double angle)
Rotates the vector around a given arbitrary axis in 3 dimensional space.
|
Vector |
rotateAroundX(double angle)
Rotates the vector around the x axis.
|
Vector |
rotateAroundY(double angle)
Rotates the vector around the y axis.
|
Vector |
rotateAroundZ(double angle)
Rotates the vector around the z axis
|
Map<String,Object> |
serialize()
Creates a Map representation of this class.
|
Vector |
setX(double x)
Set the X component.
|
Vector |
setX(float x)
Set the X component.
|
Vector |
setX(int x)
Set the X component.
|
Vector |
setY(double y)
Set the Y component.
|
Vector |
setY(float y)
Set the Y component.
|
Vector |
setY(int y)
Set the Y component.
|
Vector |
setZ(double z)
Set the Z component.
|
Vector |
setZ(float z)
Set the Z component.
|
Vector |
setZ(int z)
Set the Z component.
|
Vector |
subtract(Vector vec)
Subtracts a vector from this one.
|
BlockVector |
toBlockVector()
Get the block vector of this vector.
|
Location |
toLocation(World world)
Gets a Location version of this vector with yaw and pitch being 0.
|
Location |
toLocation(World world,
float yaw,
float pitch)
Gets a Location version of this vector.
|
String |
toString()
Returns this vector's components as x,y,z.
|
Vector |
zero()
Zero this vector's components.
|
public Vector()
public Vector(int x, int y, int z)
x
- X componenty
- Y componentz
- Z componentpublic Vector(double x, double y, double z)
x
- X componenty
- Y componentz
- Z componentpublic Vector(float x, float y, float z)
x
- X componenty
- Y componentz
- Z component@NotNull public Vector add(@NotNull Vector vec)
vec
- The other vector@NotNull public Vector subtract(@NotNull Vector vec)
vec
- The other vector@NotNull public Vector multiply(@NotNull Vector vec)
vec
- The other vector@NotNull public Vector divide(@NotNull Vector vec)
vec
- The other vector@NotNull public Vector copy(@NotNull Vector vec)
vec
- The other vectorpublic double length()
public double lengthSquared()
public double distance(@NotNull Vector o)
o
- The other vectorpublic double distanceSquared(@NotNull Vector o)
o
- The other vectorpublic float angle(@NotNull Vector other)
other
- The other vector@NotNull public Vector midpoint(@NotNull Vector other)
other
- The other vector@NotNull public Vector getMidpoint(@NotNull Vector other)
other
- The other vector@NotNull public Vector multiply(int m)
m
- The factor@NotNull public Vector multiply(double m)
m
- The factor@NotNull public Vector multiply(float m)
m
- The factorpublic double dot(@NotNull Vector other)
other
- The other vector@NotNull public Vector crossProduct(@NotNull Vector o)
o
- The other vector@NotNull public Vector getCrossProduct(@NotNull Vector o)
o
- The other vector@NotNull public Vector normalize()
@NotNull public Vector zero()
public boolean isInAABB(@NotNull Vector min, @NotNull Vector max)
The minimum and maximum vectors given must be truly the minimum and maximum X, Y and Z components.
min
- Minimum vectormax
- Maximum vectorpublic boolean isInSphere(@NotNull Vector origin, double radius)
origin
- Sphere origin.radius
- Sphere radiuspublic boolean isNormalized()
@NotNull public Vector rotateAroundX(double angle)
This piece of math is based on the standard rotation matrix for vectors in three dimensional space. This matrix can be found here: Rotation Matrix.
angle
- the angle to rotate the vector about. This angle is passed
in radians@NotNull public Vector rotateAroundY(double angle)
This piece of math is based on the standard rotation matrix for vectors in three dimensional space. This matrix can be found here: Rotation Matrix.
angle
- the angle to rotate the vector about. This angle is passed
in radians@NotNull public Vector rotateAroundZ(double angle)
This piece of math is based on the standard rotation matrix for vectors in three dimensional space. This matrix can be found here: Rotation Matrix.
angle
- the angle to rotate the vector about. This angle is passed
in radians@NotNull public Vector rotateAroundAxis(@NotNull Vector axis, double angle) throws IllegalArgumentException
Rotation will follow the general Right-Hand-Rule, which means rotation will be counterclockwise when the axis is pointing towards the observer.
This method will always make sure the provided axis is a unit vector, to
not modify the length of the vector when rotating. If you are experienced
with the scaling of a non-unit axis vector, you can use
rotateAroundNonUnitAxis(Vector, double)
.
axis
- the axis to rotate the vector around. If the passed vector is
not of length 1, it gets copied and normalized before using it for the
rotation. Please use normalize()
on the instance before
passing it to this methodangle
- the angle to rotate the vector around the axisIllegalArgumentException
- if the provided axis vector instance is
null@NotNull public Vector rotateAroundNonUnitAxis(@NotNull Vector axis, double angle) throws IllegalArgumentException
Rotation will follow the general Right-Hand-Rule, which means rotation will be counterclockwise when the axis is pointing towards the observer.
Note that the vector length will change accordingly to the axis vector
length. If the provided axis is not a unit vector, the rotated vector
will not have its previous length. The scaled length of the resulting
vector will be related to the axis vector. If you are not perfectly sure
about the scaling of the vector, use
rotateAroundAxis(Vector, double)
axis
- the axis to rotate the vector around.angle
- the angle to rotate the vector around the axisIllegalArgumentException
- if the provided axis vector instance is
nullpublic double getX()
public int getBlockX()
public double getY()
public int getBlockY()
public double getZ()
public int getBlockZ()
@NotNull public Vector setX(int x)
x
- The new X component.@NotNull public Vector setX(double x)
x
- The new X component.@NotNull public Vector setX(float x)
x
- The new X component.@NotNull public Vector setY(int y)
y
- The new Y component.@NotNull public Vector setY(double y)
y
- The new Y component.@NotNull public Vector setY(float y)
y
- The new Y component.@NotNull public Vector setZ(int z)
z
- The new Z component.@NotNull public Vector setZ(double z)
z
- The new Z component.@NotNull public Vector setZ(float z)
z
- The new Z component.public boolean equals(Object obj)
Only two Vectors can ever return true. This method uses a fuzzy match to account for floating point errors. The epsilon can be retrieved with epsilon.
public int hashCode()
@NotNull public Vector clone()
public String toString()
@NotNull public Location toLocation(@NotNull World world)
world
- The world to link the location to.@NotNull public Location toLocation(@NotNull World world, float yaw, float pitch)
world
- The world to link the location to.yaw
- The desired yaw.pitch
- The desired pitch.@NotNull public BlockVector toBlockVector()
public void checkFinite() throws IllegalArgumentException
IllegalArgumentException
- if any component is not finitepublic static double getEpsilon()
@NotNull public static Vector getMinimum(@NotNull Vector v1, @NotNull Vector v2)
v1
- The first vector.v2
- The second vector.@NotNull public static Vector getMaximum(@NotNull Vector v1, @NotNull Vector v2)
v1
- The first vector.v2
- The second vector.@NotNull public static Vector getRandom()
@NotNull public Map<String,Object> serialize()
ConfigurationSerializable
This class must provide a method to restore this class, as defined in
the ConfigurationSerializable
interface javadocs.
serialize
in interface ConfigurationSerializable
Copyright © 2022. All rights reserved.