class Vector { constructor(x, y, z) { if (arguments.length === 1) { z = x.z; y = x.y; x = x.x; } this.x = x; this.y = y; if (z !== undefined) { this.z = z; } } dist(other, y, z = 0) { if (y !== undefined) other = { x: other, y, z }; let sum = 0; sum += (this.x - other.x) ** 2; sum += (this.y - other.y) ** 2; let z1 = this.z ? this.z : 0; let z2 = other.z ? other.z : 0; sum += (z1 - z2) ** 2; return sum ** 0.5; } normalize(f) { let mag = this.dist(0, 0, 0); return new Vector((f * this.x) / mag, (f * this.y) / mag, (f * this.z) / mag); } getAngle() { return -Math.atan2(this.y, this.x); } reflect(other) { let p = new Vector(other.x - this.x, other.y - this.y); if (other.z !== undefined) { p.z = other.z; if (this.z !== undefined) { p.z -= this.z; } } return this.subtract(p); } add(other) { let p = new Vector(this.x + other.x, this.y + other.y); if (this.z !== undefined) { p.z = this.z; if (other.z !== undefined) { p.z += other.z; } } return p; } subtract(other) { let p = new Vector(this.x - other.x, this.y - other.y); if (this.z !== undefined) { p.z = this.z; if (other.z !== undefined) { p.z -= other.z; } } return p; } scale(f = 1) { if (f === 0) { return new Vector(0, 0, this.z === undefined ? undefined : 0); } let p = new Vector(this.x * f, this.y * f); if (this.z !== undefined) { p.z = this.z * f; } return p; } } export { Vector };