migrate from perforce
This commit is contained in:
72
dist/Util/Vector2.js
vendored
Normal file
72
dist/Util/Vector2.js
vendored
Normal file
@@ -0,0 +1,72 @@
|
||||
export class Vector2 {
|
||||
x;
|
||||
y;
|
||||
constructor(x, y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
static lerp(a, b, t) {
|
||||
return a.multiplyScalar(1 - t).add(b.multiplyScalar(t));
|
||||
}
|
||||
add(vector) {
|
||||
return new Vector2(this.x + vector.x, this.y + vector.y);
|
||||
}
|
||||
subtract(vector) {
|
||||
return new Vector2(this.x - vector.x, this.y - vector.y);
|
||||
}
|
||||
multiplyScalar(scalar) {
|
||||
return new Vector2(this.x * scalar, this.y * scalar);
|
||||
}
|
||||
dot(vector) {
|
||||
return this.x * vector.x + this.y * vector.y;
|
||||
}
|
||||
cross(vector) {
|
||||
return this.x * vector.y - this.y * vector.x;
|
||||
}
|
||||
magnitude() {
|
||||
return Math.sqrt(this.x * this.x + this.y * this.y);
|
||||
}
|
||||
normalized() {
|
||||
const magnitude = this.magnitude();
|
||||
if (magnitude === 0) {
|
||||
throw new Error("Cannot normalize a vector with magnitude 0");
|
||||
}
|
||||
return this.multiplyScalar(1 / magnitude);
|
||||
}
|
||||
distance(vector) {
|
||||
return Math.sqrt((this.x - vector.x) ** 2 + (this.y - vector.y) ** 2);
|
||||
}
|
||||
distanceSquared(vector) {
|
||||
return (this.x - vector.x) ** 2 + (this.y - vector.y) ** 2;
|
||||
}
|
||||
limit(max) {
|
||||
const magnitude = this.magnitude();
|
||||
if (magnitude > max) {
|
||||
return this.normalized().multiplyScalar(max);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
angle() {
|
||||
return Math.atan2(this.y, this.x);
|
||||
}
|
||||
angleBetween(vector) {
|
||||
const dotProd = this.dot(vector);
|
||||
const magnitudes = this.magnitude() * vector.magnitude();
|
||||
if (magnitudes === 0) {
|
||||
throw new Error("Cannot calculate angle with a zero-magnitude vector");
|
||||
}
|
||||
return Math.acos(dotProd / magnitudes);
|
||||
}
|
||||
clone() {
|
||||
return new Vector2(this.x, this.y);
|
||||
}
|
||||
equals(vector) {
|
||||
return this.x === vector.x && this.y === vector.y;
|
||||
}
|
||||
rotate(angle) {
|
||||
const cos = Math.cos(angle);
|
||||
const sin = Math.sin(angle);
|
||||
return new Vector2(this.x * cos - this.y * sin, this.x * sin + this.y * cos);
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=Vector2.js.map
|
||||
Reference in New Issue
Block a user