{"version":3,"sources":["../src/Vector.js"],"names":[],"mappings":"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","file":"Vector.js","sourcesContent":["\"use strict\";\r\n\r\nimport { Matrix } from \"./Matrix\";\r\nimport { PRECISION } from \"./PRECISION\";\r\n\r\nexport class Vector\r\n{\r\n constructor (elements)\r\n {\r\n this.setElements(elements);\r\n }\r\n\r\n e (i)\r\n {\r\n return (i < 1 || i > this.elements.length) ? null : this.elements[i-1];\r\n }\r\n\r\n dimensions ()\r\n {\r\n return this.elements.length;\r\n }\r\n\r\n modulus ()\r\n {\r\n return Math.sqrt(this.dot(this));\r\n }\r\n\r\n eql (vector)\r\n {\r\n var n = this.elements.length;\r\n var V = vector.elements || vector;\r\n if (n !== V.length)\r\n {\r\n return false;\r\n }\r\n while (n--)\r\n {\r\n if (Math.abs(this.elements[n] - V[n]) > PRECISION)\r\n {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n dup () {\r\n return new Vector(this.elements);\r\n }\r\n\r\n map (fn, context)\r\n {\r\n var elements = [];\r\n this.each(function(x, i)\r\n {\r\n elements.push(fn.call(context, x, i));\r\n });\r\n return new Vector(elements);\r\n }\r\n\r\n forEach (fn, context)\r\n {\r\n var n = this.elements.length;\r\n for (var i = 0; i < n; i++)\r\n {\r\n fn.call(context, this.elements[i], i+1);\r\n }\r\n }\r\n\r\n toUnitVector ()\r\n {\r\n var r = this.modulus();\r\n if (r === 0)\r\n {\r\n return this.dup();\r\n }\r\n return this.map(function(x)\r\n {\r\n return x/r;\r\n });\r\n }\r\n\r\n angleFrom (vector)\r\n {\r\n var V = vector.elements || vector;\r\n var n = this.elements.length, k = n, i;\r\n if (n !== V.length)\r\n {\r\n return null;\r\n }\r\n var dot = 0, mod1 = 0, mod2 = 0;\r\n // Work things out in parallel to save time\r\n this.each(function(x, i)\r\n {\r\n dot += x * V[i-1];\r\n mod1 += x * x;\r\n mod2 += V[i-1] * V[i-1];\r\n });\r\n mod1 = Math.sqrt(mod1); mod2 = Math.sqrt(mod2);\r\n if (mod1*mod2 === 0)\r\n {\r\n return null;\r\n }\r\n var theta = dot / (mod1*mod2);\r\n if (theta < -1)\r\n {\r\n theta = -1;\r\n }\r\n if (theta > 1)\r\n {\r\n theta = 1;\r\n }\r\n return Math.acos(theta);\r\n }\r\n\r\n isParallelTo (vector)\r\n {\r\n var angle = this.angleFrom(vector);\r\n return (angle === null) ? null : (angle <= PRECISION);\r\n }\r\n\r\n isAntiparallelTo (vector)\r\n {\r\n var angle = this.angleFrom(vector);\r\n return (angle === null) ? null : (Math.abs(angle - Math.PI) <= PRECISION);\r\n }\r\n\r\n isPerpendicularTo (vector)\r\n {\r\n var dot = this.dot(vector);\r\n return (dot === null) ? null : (Math.abs(dot) <= PRECISION);\r\n }\r\n\r\n add (vector)\r\n {\r\n var V = vector.elements || vector;\r\n if (this.elements.length !== V.length)\r\n {\r\n return null;\r\n }\r\n return this.map(function(x, i) { return x + V[i-1]; });\r\n }\r\n\r\n subtract (vector)\r\n {\r\n var V = vector.elements || vector;\r\n if (this.elements.length !== V.length)\r\n {\r\n return null;\r\n }\r\n return this.map(function(x, i)\r\n {\r\n return x - V[i-1];\r\n });\r\n }\r\n\r\n multiply (k)\r\n {\r\n return this.map(function(x)\r\n {\r\n return x*k;\r\n });\r\n }\r\n\r\n dot (vector)\r\n {\r\n var V = vector.elements || vector;\r\n var i, product = 0, n = this.elements.length;\r\n if (n !== V.length)\r\n {\r\n return null;\r\n }\r\n while (n--)\r\n {\r\n product += this.elements[n] * V[n];\r\n }\r\n return product;\r\n }\r\n\r\n cross (vector)\r\n {\r\n var B = vector.elements || vector;\r\n if (this.elements.length !== 3 || B.length !== 3)\r\n {\r\n return null;\r\n }\r\n var A = this.elements;\r\n return new Vector([\r\n (A[1] * B[2]) - (A[2] * B[1]),\r\n (A[2] * B[0]) - (A[0] * B[2]),\r\n (A[0] * B[1]) - (A[1] * B[0])\r\n ]);\r\n }\r\n\r\n max ()\r\n {\r\n var m = 0, i = this.elements.length;\r\n while (i--)\r\n {\r\n if (Math.abs(this.elements[i]) > Math.abs(m))\r\n {\r\n m = this.elements[i];\r\n }\r\n }\r\n return m;\r\n }\r\n\r\n indexOf (x)\r\n {\r\n var index = null, n = this.elements.length;\r\n for (var i = 0; i < n; i++)\r\n {\r\n if (index === null && this.elements[i] === x)\r\n {\r\n index = i + 1;\r\n }\r\n }\r\n return index;\r\n }\r\n\r\n toDiagonalMatrix ()\r\n {\r\n return Matrix.Diagonal(this.elements);\r\n }\r\n\r\n round ()\r\n {\r\n return this.map(function(x)\r\n {\r\n return Math.round(x);\r\n });\r\n }\r\n\r\n snapTo (x)\r\n {\r\n return this.map(function(y)\r\n {\r\n return (Math.abs(y - x) <= PRECISION) ? x : y;\r\n });\r\n }\r\n\r\n distanceFrom (obj)\r\n {\r\n if (obj.anchor || (obj.start && obj.end))\r\n {\r\n return obj.distanceFrom(this);\r\n }\r\n var V = obj.elements || obj;\r\n if (V.length !== this.elements.length)\r\n {\r\n return null;\r\n }\r\n var sum = 0, part;\r\n this.each(function(x, i)\r\n {\r\n part = x - V[i-1];\r\n sum += part * part;\r\n });\r\n return Math.sqrt(sum);\r\n }\r\n\r\n liesOn (line)\r\n {\r\n return line.contains(this);\r\n }\r\n\r\n liesIn (plane)\r\n {\r\n return plane.contains(this);\r\n }\r\n\r\n rotate (t, obj)\r\n {\r\n var V, R = null, x, y, z;\r\n if (t.determinant)\r\n {\r\n R = t.elements;\r\n }\r\n switch (this.elements.length)\r\n {\r\n case 2:\r\n {\r\n V = obj.elements || obj;\r\n if (V.length !== 2)\r\n {\r\n return null;\r\n }\r\n if (!R)\r\n {\r\n R = Matrix.Rotation(t).elements;\r\n }\r\n x = this.elements[0] - V[0];\r\n y = this.elements[1] - V[1];\r\n return new Vector([\r\n V[0] + R[0][0] * x + R[0][1] * y,\r\n V[1] + R[1][0] * x + R[1][1] * y\r\n ]);\r\n break;\r\n }\r\n case 3:\r\n {\r\n if (!obj.direction)\r\n {\r\n return null;\r\n }\r\n var C = obj.pointClosestTo(this).elements;\r\n if (!R)\r\n {\r\n R = Matrix.Rotation(t, obj.direction).elements;\r\n }\r\n x = this.elements[0] - C[0];\r\n y = this.elements[1] - C[1];\r\n z = this.elements[2] - C[2];\r\n return new Vector([\r\n C[0] + R[0][0] * x + R[0][1] * y + R[0][2] * z,\r\n C[1] + R[1][0] * x + R[1][1] * y + R[1][2] * z,\r\n C[2] + R[2][0] * x + R[2][1] * y + R[2][2] * z\r\n ]);\r\n break;\r\n }\r\n default:\r\n {\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n reflectionIn (obj)\r\n {\r\n if (obj.anchor)\r\n {\r\n // obj is a plane or line\r\n var P = this.elements.slice();\r\n var C = obj.pointClosestTo(P).elements;\r\n return new Vector([C[0] + (C[0] - P[0]), C[1] + (C[1] - P[1]), C[2] + (C[2] - (P[2] || 0))]);\r\n }\r\n else\r\n {\r\n // obj is a point\r\n var Q = obj.elements || obj;\r\n if (this.elements.length !== Q.length)\r\n {\r\n return null;\r\n }\r\n return this.map(function(x, i) { return Q[i-1] + (Q[i-1] - x); });\r\n }\r\n }\r\n\r\n to3D ()\r\n {\r\n var V = this.dup();\r\n switch (V.elements.length)\r\n {\r\n case 3:\r\n {\r\n break;\r\n }\r\n case 2:\r\n {\r\n V.elements.push(0);\r\n break;\r\n }\r\n default:\r\n {\r\n return null;\r\n }\r\n }\r\n return V;\r\n }\r\n\r\n inspect ()\r\n {\r\n return '[' + this.elements.join(', ') + ']';\r\n }\r\n\r\n setElements (els)\r\n {\r\n this.elements = (els.elements || els).slice();\r\n return this;\r\n }\r\n\r\n //From glUtils.js\r\n flatten ()\r\n {\r\n return this.elements;\r\n }\r\n}\r\n\r\nVector.Random = function(n)\r\n{\r\n var elements = [];\r\n while (n--)\r\n {\r\n elements.push(Math.random());\r\n }\r\n return new Vector(elements);\r\n};\r\n\r\nVector.Zero = function(n)\r\n{\r\n var elements = [];\r\n while (n--)\r\n {\r\n elements.push(0);\r\n }\r\n return new Vector(elements);\r\n};\r\n\r\nVector.prototype.x = Vector.prototype.multiply;\r\nVector.prototype.each = Vector.prototype.forEach;\r\n\r\nVector.i = new Vector([1,0,0]);\r\nVector.j = new Vector([0,1,0]);\r\nVector.k = new Vector([0,0,1]);"]}