60 lines
1.1 KiB
JavaScript
60 lines
1.1 KiB
JavaScript
class Vec2 {
|
|
x;
|
|
y;
|
|
constructor(x, y) {
|
|
this.x = x;
|
|
this.y = y;
|
|
}
|
|
add(other) {
|
|
this.x += other.x;
|
|
this.y += other.y;
|
|
}
|
|
addNew(other) {
|
|
return new Vec2(this.x + other.x, this.y + other.y);
|
|
}
|
|
sub(other) {
|
|
this.x -= other.x;
|
|
this.y -= other.y;
|
|
}
|
|
mult(scalar) {
|
|
this.x *= scalar;
|
|
this.y *= scalar;
|
|
}
|
|
splatToArray() {
|
|
return [this.x, this.y];
|
|
}
|
|
static angle(angle) {
|
|
const eps = 1e-6;
|
|
let x = Math.cos(angle);
|
|
let y = Math.sin(angle);
|
|
if ((x > 0 && x < eps)
|
|
|| (x < 0 && x > -eps))
|
|
x = 0;
|
|
if ((y > 0 && y < eps)
|
|
|| (y < 0 && y > -eps))
|
|
y = 0;
|
|
return new Vec2(x, y);
|
|
}
|
|
}
|
|
class Vec3 {
|
|
x;
|
|
y;
|
|
z;
|
|
constructor(x, y, z) {
|
|
this.x = x;
|
|
this.y = y;
|
|
this.z = z;
|
|
}
|
|
add(other) {
|
|
this.x += other.x;
|
|
this.y += other.y;
|
|
this.z += other.z;
|
|
}
|
|
sub(other) {
|
|
this.x -= other.x;
|
|
this.y -= other.y;
|
|
this.z -= other.z;
|
|
}
|
|
}
|
|
export { Vec2, Vec3 };
|