96 lines
2.3 KiB
Java
96 lines
2.3 KiB
Java
package org.hl.engine.math.lalg;
|
|
|
|
import java.util.Objects;
|
|
|
|
public class Vector2f {
|
|
private float x;
|
|
private float y;
|
|
|
|
// Just a vector if you know what I mean
|
|
public Vector2f (float x, float y) {
|
|
this.x = x;
|
|
this.y = y;
|
|
}
|
|
|
|
public void setVector(float x, float y) {
|
|
this.x = x;
|
|
this.y = y;
|
|
}
|
|
|
|
|
|
public static Vector2f add(Vector2f first, Vector2f second) {
|
|
return new Vector2f(first.getX() + second.getX(), first.getY() + second.getY());
|
|
}
|
|
|
|
public static Vector2f sub(Vector2f first, Vector2f second) {
|
|
return new Vector2f(first.getX() - second.getX(), first.getY() - second.getY());
|
|
}
|
|
|
|
public static Vector2f mul(Vector2f first, Vector2f second) {
|
|
return new Vector2f(first.getX() * second.getX(), first.getY() * second.getY());
|
|
}
|
|
|
|
public static Vector2f div(Vector2f first, Vector2f second) {
|
|
return new Vector2f(first.getX() / second.getX(), first.getY() / second.getY());
|
|
}
|
|
|
|
public static float dot(Vector2f first, Vector2f second) {
|
|
return first.getX()*second.getX() + first.getY()*second.getY();
|
|
}
|
|
|
|
public static float magnitude(Vector2f vector) {
|
|
return (float)Math.sqrt(vector.getX()*vector.getX() + vector.getY()*vector.getY());
|
|
}
|
|
|
|
public static Vector2f normalize(Vector2f vector) {
|
|
float len = Vector2f.magnitude(vector);
|
|
return Vector2f.div(vector, new Vector2f(len, len));
|
|
}
|
|
|
|
public static Vector2f scale(Vector2f vector, float scalar) {
|
|
return new Vector2f(vector.getX()*scalar, vector.getY()*scalar);
|
|
}
|
|
|
|
public static Vector2f projection(Vector2f projecting, Vector2f projectedOnto) {
|
|
return Vector2f.scale(projectedOnto, ( Vector2f.dot(projecting, projectedOnto) / Vector2f.dot(projectedOnto, projectedOnto) ));
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object o) {
|
|
if (this == o) return true;
|
|
if (o == null || getClass() != o.getClass()) return false;
|
|
Vector2f vector2f = (Vector2f) o;
|
|
return Float.compare(vector2f.getX(), getX()) == 0 &&
|
|
Float.compare(vector2f.getY(), getY()) == 0;
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return Objects.hash(getX(), getY());
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return "Vector2f{" +
|
|
"x=" + x +
|
|
", y=" + y +
|
|
'}';
|
|
}
|
|
|
|
public float getX() {
|
|
return x;
|
|
}
|
|
|
|
public void setX(float x) {
|
|
this.x = x;
|
|
}
|
|
|
|
public float getY() {
|
|
return y;
|
|
}
|
|
|
|
public void setY(float y) {
|
|
this.y = y;
|
|
}
|
|
}
|