mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2024-12-23 17:57:38 +00:00
Added various methods to Vector2D.
- Several overloads of add, subtract, multiply and divide - length, lengthSq, distance, distanceSq, normalize, dot, containedWithin, containedWithinBlock and transform2D - static methods getMinimum and getMaximum
This commit is contained in:
parent
9ddbcf0395
commit
978d499282
@ -145,6 +145,354 @@ public class Vector2D {
|
||||
return new Vector2D(x, z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two points.
|
||||
*
|
||||
* @param other
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D add(Vector2D other) {
|
||||
return new Vector2D(x + other.x, z + other.z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two points.
|
||||
*
|
||||
* @param x
|
||||
* @param y
|
||||
* @param z
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D add(double x, double z) {
|
||||
return new Vector2D(this.x + x, this.z + z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds two points.
|
||||
*
|
||||
* @param x
|
||||
* @param y
|
||||
* @param z
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D add(int x, int z) {
|
||||
return new Vector2D(this.x + x, this.z + z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds points.
|
||||
*
|
||||
* @param others
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D add(Vector2D... others) {
|
||||
double newX = x, newZ = z;
|
||||
|
||||
for (int i = 0; i < others.length; ++i) {
|
||||
newX += others[i].x;
|
||||
newZ += others[i].z;
|
||||
}
|
||||
return new Vector2D(newX, newZ);
|
||||
}
|
||||
|
||||
/**
|
||||
* Subtracts two points.
|
||||
*
|
||||
* @param other
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D subtract(Vector2D other) {
|
||||
return new Vector2D(x - other.x, z - other.z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Subtract two points.
|
||||
*
|
||||
* @param x
|
||||
* @param y
|
||||
* @param z
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D subtract(double x, double z) {
|
||||
return new Vector2D(this.x - x, this.z - z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Subtract two points.
|
||||
*
|
||||
* @param x
|
||||
* @param y
|
||||
* @param z
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D subtract(int x, int z) {
|
||||
return new Vector2D(this.x - x, this.z - z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Subtract points.
|
||||
*
|
||||
* @param others
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D subtract(Vector2D... others) {
|
||||
double newX = x, newZ = z;
|
||||
|
||||
for (int i = 0; i < others.length; ++i) {
|
||||
newX -= others[i].x;
|
||||
newZ -= others[i].z;
|
||||
}
|
||||
return new Vector2D(newX, newZ);
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies two points.
|
||||
*
|
||||
* @param other
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D multiply(Vector2D other) {
|
||||
return new Vector2D(x * other.x, z * other.z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiply two points.
|
||||
*
|
||||
* @param x
|
||||
* @param y
|
||||
* @param z
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D multiply(double x, double z) {
|
||||
return new Vector2D(this.x * x, this.z * z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiply two points.
|
||||
*
|
||||
* @param x
|
||||
* @param y
|
||||
* @param z
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D multiply(int x, int z) {
|
||||
return new Vector2D(this.x * x, this.z * z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiply points.
|
||||
*
|
||||
* @param others
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D multiply(Vector2D... others) {
|
||||
double newX = x, newZ = z;
|
||||
|
||||
for (int i = 0; i < others.length; ++i) {
|
||||
newX *= others[i].x;
|
||||
newZ *= others[i].z;
|
||||
}
|
||||
return new Vector2D(newX, newZ);
|
||||
}
|
||||
|
||||
/**
|
||||
* Scalar multiplication.
|
||||
*
|
||||
* @param n
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D multiply(double n) {
|
||||
return new Vector2D(this.x * n, this.z * n);
|
||||
}
|
||||
|
||||
/**
|
||||
* Scalar multiplication.
|
||||
*
|
||||
* @param n
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D multiply(float n) {
|
||||
return new Vector2D(this.x * n, this.z * n);
|
||||
}
|
||||
|
||||
/**
|
||||
* Scalar multiplication.
|
||||
*
|
||||
* @param n
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D multiply(int n) {
|
||||
return new Vector2D(this.x * n, this.z * n);
|
||||
}
|
||||
|
||||
/**
|
||||
* Divide two points.
|
||||
*
|
||||
* @param other
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D divide(Vector2D other) {
|
||||
return new Vector2D(x / other.x, z / other.z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Divide two points.
|
||||
*
|
||||
* @param x
|
||||
* @param y
|
||||
* @param z
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D divide(double x, double z) {
|
||||
return new Vector2D(this.x / x, this.z / z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Divide two points.
|
||||
*
|
||||
* @param x
|
||||
* @param y
|
||||
* @param z
|
||||
* @return New point
|
||||
*/
|
||||
public Vector2D divide(int x, int z) {
|
||||
return new Vector2D(this.x / x, this.z / z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Scalar division.
|
||||
*
|
||||
* @param n
|
||||
* @return new point
|
||||
*/
|
||||
public Vector2D divide(int n) {
|
||||
return new Vector2D(x / n, z / n);
|
||||
}
|
||||
|
||||
/**
|
||||
* Scalar division.
|
||||
*
|
||||
* @param n
|
||||
* @return new point
|
||||
*/
|
||||
public Vector2D divide(double n) {
|
||||
return new Vector2D(x / n, z / n);
|
||||
}
|
||||
|
||||
/**
|
||||
* Scalar division.
|
||||
*
|
||||
* @param n
|
||||
* @return new point
|
||||
*/
|
||||
public Vector2D divide(float n) {
|
||||
return new Vector2D(x / n, z / n);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the length of the vector.
|
||||
*
|
||||
* @return length
|
||||
*/
|
||||
public double length() {
|
||||
return Math.sqrt(x * x + z * z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the length^2 of the vector.
|
||||
*
|
||||
* @return length^2
|
||||
*/
|
||||
public double lengthSq() {
|
||||
return x * x + z * z;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the distance away from a point.
|
||||
*
|
||||
* @param pt
|
||||
* @return distance
|
||||
*/
|
||||
public double distance(Vector2D pt) {
|
||||
return Math.sqrt(Math.pow(pt.x - x, 2) +
|
||||
Math.pow(pt.z - z, 2));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the distance away from a point, squared.
|
||||
*
|
||||
* @param pt
|
||||
* @return distance
|
||||
*/
|
||||
public double distanceSq(Vector2D pt) {
|
||||
return Math.pow(pt.x - x, 2) +
|
||||
Math.pow(pt.z - z, 2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the normalized vector.
|
||||
*
|
||||
* @return vector
|
||||
*/
|
||||
public Vector2D normalize() {
|
||||
return divide(length());
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the dot product of this and another vector.
|
||||
*
|
||||
* @param other
|
||||
* @return the dot product of this and the other vector
|
||||
*/
|
||||
public double dot(Vector2D other) {
|
||||
return x * other.x + z * other.z;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks to see if a vector is contained with another.
|
||||
*
|
||||
* @param min
|
||||
* @param max
|
||||
* @return
|
||||
*/
|
||||
public boolean containedWithin(Vector2D min, Vector2D max) {
|
||||
return x >= min.getX() && x <= max.getX()
|
||||
&& z >= min.getZ() && z <= max.getZ();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks to see if a vector is contained with another.
|
||||
*
|
||||
* @param min
|
||||
* @param max
|
||||
* @return
|
||||
*/
|
||||
public boolean containedWithinBlock(Vector2D min, Vector2D max) {
|
||||
return getBlockX() >= min.getBlockX() && getBlockX() <= max.getBlockX()
|
||||
&& getBlockZ() >= min.getBlockZ() && getBlockZ() <= max.getBlockZ();
|
||||
}
|
||||
|
||||
/**
|
||||
* 2D transformation.
|
||||
*
|
||||
* @param angle in degrees
|
||||
* @param aboutX
|
||||
* @param aboutZ
|
||||
* @param translateX
|
||||
* @param translateZ
|
||||
* @return
|
||||
*/
|
||||
public Vector2D transform2D(double angle,
|
||||
double aboutX, double aboutZ, double translateX, double translateZ) {
|
||||
angle = Math.toRadians(angle);
|
||||
double x = this.x;
|
||||
double z = this.z;
|
||||
double x2 = x * Math.cos(angle) - z * Math.sin(angle);
|
||||
double z2 = x * Math.sin(angle) + z * Math.cos(angle);
|
||||
return new Vector2D(x2 + aboutX + translateX,
|
||||
z2 + aboutZ + translateZ);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a BlockVector version.
|
||||
*
|
||||
@ -199,4 +547,32 @@ public class Vector2D {
|
||||
public Vector toVector() {
|
||||
return new Vector(x, 0, z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the minimum components of two vectors.
|
||||
*
|
||||
* @param v1
|
||||
* @param v2
|
||||
* @return minimum
|
||||
*/
|
||||
public static Vector2D getMinimum(Vector2D v1, Vector2D v2) {
|
||||
return new Vector2D(
|
||||
Math.min(v1.x, v2.x),
|
||||
Math.min(v1.z, v2.z)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the maximum components of two vectors.
|
||||
*
|
||||
* @param v1
|
||||
* @param v2
|
||||
* @return maximum
|
||||
*/
|
||||
public static Vector2D getMaximum(Vector2D v1, Vector2D v2) {
|
||||
return new Vector2D(
|
||||
Math.max(v1.x, v2.x),
|
||||
Math.max(v1.z, v2.z)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user