export var Vector; (function (Vector) { Vector.Vec2 = function (x, y) { return this; }; Object.defineProperty(Vector.Vec2, "create", { configurable: false, writable: false, value: function (x, y) { return new Vector.Vec2(x, y); } }); Object.defineProperty(Vector.Vec2, "I", { configurable: false, writable: false, value: new Vector.Vec2(1, 0) }); Object.defineProperty(Vector.Vec2, "J", { configurable: false, writable: false, value: new Vector.Vec2(0, 1) }); Vector.Vec2.prototype.add = function (other) { if (typeof other == "number") { this.x += other; this.y += other; } else { this.x += other.x; this.y += other.y; } return this; }; Vector.Vec2.prototype.subtract = function (other) { if (typeof other == "number") { this.x -= other; this.y -= other; } else { this.x -= other.x; this.y -= other.y; } return this; }; Vector.Vec2.prototype.dot = function (other) { if (typeof other == "number") { this.x *= other; this.y *= other; } else { this.x *= other.x; this.y *= other.y; } return this; }; Vector.Vec2.prototype.divide = function (other) { if (typeof other == "number") { this.x /= other; this.y /= other; } else { this.x /= other.x; this.y /= other.y; } return this; }; Vector.Vec2.prototype.cross = function (other) { if (typeof other == "number") { this.x *= other; this.y *= other; } else { this.x *= other.y; this.y *= other.x; } return this; }; Vector.Vec2.prototype.magnitude = function () { return Math.sqrt(this.x * this.x + this.y * this.y); }; Vector.Vec2.prototype.normalize = function () { this.x /= this.magnitude(); this.y /= this.magnitude(); return this; }; Vector.Vec2.prototype.distanceTo = function (other) { return Math.sqrt((this.y - other.y) + (this.x - other.x)); }; Vector.Vec2.prototype.rotateX = function (theta) { var angle = Math.PI / 180 * theta; this.y += Math.asin(angle); return this; }; Vector.Vec2.prototype.rotateY = function (theta) { var angle = Math.PI / 180 * theta; this.x += Math.acos(angle); return this; }; Vector.Vec2.prototype.negate = function () { this.x = -this.x; this.y = -this.y; return this; }; Vector.Vec2.prototype.toString = function () { return "<" + this.x + "," + this.y + ">"; }; Vector.Vec3 = function (x = 0, y = 0, z = 0) { this.x = x; this.y = y; this.z = z; return this; }; Object.defineProperty(Vector.Vec3, "I", { get: function () { return new Vector.Vec3(1, 0, 0); } }); Object.defineProperty(Vector.Vec3, "J", { get: function () { return new Vector.Vec3(0, 1, 0); } }); Object.defineProperty(Vector.Vec3, "K", { get: function () { return new Vector.Vec3(0, 0, 1); } }); Vector.Vec3.prototype.add = function (v) { if (v instanceof Vector.Vec3) { this.x += v.x; this.y += v.y; this.z += v.z; } else { this.x += v; this.y += v; this.z += v; } return this; }; Vector.Vec3.prototype.subtract = function (v) { if (v instanceof Vector.Vec3) { this.x -= v.x; this.y -= v.y; this.z -= v.z; } else { this.x -= v; this.y -= v; this.z -= v; } return this; }; Vector.Vec3.prototype.clone = function () { return new Vector.Vec3(this.x, this.y, this.z); }; Vector.Vec3.prototype.dot = function (v) { if (v instanceof Vector.Vec3) { this.x *= v.x; this.y *= v.y; this.z *= v.z; } else { this.x *= v; this.y *= v; this.z *= v; } return this; }; Vector.Vec3.prototype.create = function (x, y, z) { return new Vector.Vec3(x, y, z); }; Vector.Vec3.prototype.cross = function (v) { var x = this.x; var y = this.y; var z = this.z; this.x = y * v.z - z * v.y; this.y = x * v.z - z * v.x; this.z = x * v.y - y * v.x; return this; }; Vector.Vec3.prototype.magnitude = function () { return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); }; Vector.Vec3.prototype.normalize = function () { var len = this.magnitude(); this.x /= len; this.y /= len; this.z /= len; return this; }; Vector.Vec3.prototype.rotateX = function (angle) { var y = this.y; var z = this.z; this.y = y * Math.cos(angle) - z * Math.sin(angle); this.z = z * Math.cos(angle) + y * Math.sin(angle); }; Vector.Vec3.prototype.rotateY = function (angle) { var x = this.x; var z = this.z; this.x = x * Math.cos(angle) - z * Math.sin(angle); this.z = z * Math.cos(angle) + x * Math.sin(angle); }; Vector.Vec3.prototype.rotateZ = function (angle) { var x = this.x; var y = this.y; this.x = x * Math.cos(angle) - y * Math.sin(angle); this.y = y * Math.cos(angle) + x * Math.sin(angle); }; Vector.Vec3.prototype.distance = function (v) { if (v instanceof Vector.Vec3) { var dx = this.x - v.x; var dy = this.y - v.y; var dz = this.z - v.z; return Math.sqrt(dx * dx + dy * dy + dz * dz); } else { var dx = this.x - v; var dy = this.y - v; var dz = this.z - v; return Math.sqrt(dx * dx + dy * dy + dz * dz); } }; Vector.Vec3.prototype.clone = function () { return new Vector.Vec3(this.x, this.y, this.z); }; Vector.Vec3.prototype.toString = function () { return "<" + this.x + ", " + this.y + ", " + this.z + ">"; }; Vector.Vec3.prototype.toArray = function () { return [this.x, this.y, this.z]; }; Vector.Vec3.prototype.project = function (v) { var dot = this.dot(v); var len = v.magnitude(); return v.clone().dot(dot / len); }; Vector.Vec3.prototype.reflect = function (v) { var dot = this.dot(v); var len = v.magnitude(); return v .clone() .dot(dot / len) .dot(2) .sub(this); }; ` `; })(Vector || (Vector = {}));