{"version":3,"sources":["../src/Matrix.js"],"names":[],"mappings":"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","file":"Matrix.js","sourcesContent":["\"use strict\";\r\n\r\nimport { PRECISION } from \"./PRECISION\";\r\nimport { Vector } from \"./Vector\";\r\n\r\nexport class Matrix\r\n{\r\n constructor (elements)\r\n {\r\n this.setElements(elements);\r\n }\r\n\r\n e (i,j)\r\n {\r\n if (i < 1 || i > this.elements.length || j < 1 || j > this.elements[0].length)\r\n {\r\n return null;\r\n }\r\n return this.elements[i-1][j-1];\r\n }\r\n\r\n row (i)\r\n {\r\n if (i > this.elements.length)\r\n {\r\n return null;\r\n }\r\n return new Vector(this.elements[i-1]);\r\n }\r\n\r\n col (j)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return null;\r\n }\r\n if (j > this.elements[0].length)\r\n {\r\n return null;\r\n }\r\n var col = [], n = this.elements.length;\r\n for (var i = 0; i < n; i++)\r\n {\r\n col.push(this.elements[i][j-1]);\r\n }\r\n return new Vector(col);\r\n }\r\n\r\n dimensions ()\r\n {\r\n var cols = (this.elements.length === 0) ? 0 : this.elements[0].length;\r\n return {rows: this.elements.length, cols: cols};\r\n }\r\n\r\n rows ()\r\n {\r\n return this.elements.length;\r\n }\r\n\r\n cols ()\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return 0;\r\n }\r\n return this.elements[0].length;\r\n }\r\n\r\n eql (matrix)\r\n {\r\n var M = matrix.elements || matrix;\r\n if (!M[0] || typeof(M[0][0]) === 'undefined')\r\n {\r\n M = new Matrix(M).elements;\r\n }\r\n if (this.elements.length === 0 || M.length === 0)\r\n {\r\n return this.elements.length === M.length;\r\n }\r\n if (this.elements.length !== M.length)\r\n {\r\n return false;\r\n }\r\n if (this.elements[0].length !== M[0].length)\r\n {\r\n return false;\r\n }\r\n var i = this.elements.length, nj = this.elements[0].length, j;\r\n while (i--)\r\n {\r\n j = nj;\r\n while (j--)\r\n {\r\n if (Math.abs(this.elements[i][j] - M[i][j]) > PRECISION)\r\n {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n dup ()\r\n {\r\n return new Matrix(this.elements);\r\n }\r\n\r\n map (fn, context)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return new Matrix([]);\r\n }\r\n var els = [], i = this.elements.length, nj = this.elements[0].length, j;\r\n while (i--)\r\n {\r\n j = nj;\r\n els[i] = [];\r\n while (j--)\r\n {\r\n els[i][j] = fn.call(context, this.elements[i][j], i + 1, j + 1);\r\n }\r\n }\r\n return new Matrix(els);\r\n }\r\n\r\n isSameSizeAs (matrix)\r\n {\r\n var M = matrix.elements || matrix;\r\n if (typeof(M[0][0]) === 'undefined')\r\n {\r\n M = new Matrix(M).elements;\r\n }\r\n if (this.elements.length === 0)\r\n {\r\n return M.length === 0;\r\n }\r\n return (this.elements.length === M.length && this.elements[0].length === M[0].length);\r\n }\r\n\r\n add (matrix)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return this.map(function(x)\r\n {\r\n return x\r\n });\r\n }\r\n var M = matrix.elements || matrix;\r\n if (typeof(M[0][0]) === 'undefined')\r\n {\r\n M = new Matrix(M).elements;\r\n }\r\n if (!this.isSameSizeAs(M))\r\n {\r\n return null;\r\n }\r\n return this.map(function(x, i, j)\r\n {\r\n return x + M[i-1][j-1];\r\n });\r\n }\r\n\r\n subtract (matrix)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return this.map(function(x)\r\n {\r\n return x;\r\n });\r\n }\r\n var M = matrix.elements || matrix;\r\n if (typeof(M[0][0]) === 'undefined')\r\n {\r\n M = new Matrix(M).elements;\r\n }\r\n if (!this.isSameSizeAs(M))\r\n {\r\n return null;\r\n }\r\n return this.map(function(x, i, j)\r\n {\r\n return x - M[i-1][j-1];\r\n });\r\n }\r\n\r\n canMultiplyFromLeft (matrix)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return false;\r\n }\r\n var M = matrix.elements || matrix;\r\n if (typeof(M[0][0]) === 'undefined')\r\n {\r\n M = new Matrix(M).elements;\r\n }\r\n // this.columns should equal matrix.rows\r\n return (this.elements[0].length === M.length);\r\n }\r\n\r\n multiply (matrix)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return null;\r\n }\r\n if (!matrix.elements)\r\n {\r\n return this.map(function(x)\r\n {\r\n return x * matrix;\r\n });\r\n }\r\n var returnVector = matrix.modulus ? true : false;\r\n var M = matrix.elements || matrix;\r\n if (typeof(M[0][0]) === 'undefined')\r\n {\r\n M = new Matrix(M).elements;\r\n }\r\n if (!this.canMultiplyFromLeft(M))\r\n {\r\n return null;\r\n }\r\n var i = this.elements.length, nj = M[0].length, j;\r\n var cols = this.elements[0].length, c, elements = [], sum;\r\n while (i--)\r\n {\r\n j = nj;\r\n elements[i] = [];\r\n while (j--)\r\n {\r\n c = cols;\r\n sum = 0;\r\n while (c--)\r\n {\r\n sum += this.elements[i][c] * M[c][j];\r\n }\r\n elements[i][j] = sum;\r\n }\r\n }\r\n var M = new Matrix(elements);\r\n return returnVector ? M.col(1) : M;\r\n }\r\n\r\n minor (a, b, c, d)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return null;\r\n }\r\n var elements = [], ni = c, i, nj, j;\r\n var rows = this.elements.length, cols = this.elements[0].length;\r\n while (ni--)\r\n {\r\n i = c - ni - 1;\r\n elements[i] = [];\r\n nj = d;\r\n while (nj--)\r\n {\r\n j = d - nj - 1;\r\n elements[i][j] = this.elements[(a+i-1)%rows][(b+j-1)%cols];\r\n }\r\n }\r\n return new Matrix(elements);\r\n }\r\n\r\n transpose ()\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return new Matrix([]);\r\n }\r\n var rows = this.elements.length, i, cols = this.elements[0].length, j;\r\n var elements = [], i = cols;\r\n while (i--)\r\n {\r\n j = rows;\r\n elements[i] = [];\r\n while (j--)\r\n {\r\n elements[i][j] = this.elements[j][i];\r\n }\r\n }\r\n return new Matrix(elements);\r\n }\r\n\r\n isSquare ()\r\n {\r\n var cols = (this.elements.length === 0) ? 0 : this.elements[0].length;\r\n return (this.elements.length === cols);\r\n }\r\n\r\n max ()\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return null;\r\n }\r\n var m = 0, i = this.elements.length, nj = this.elements[0].length, j;\r\n while (i--)\r\n {\r\n j = nj;\r\n while (j--)\r\n {\r\n if (Math.abs(this.elements[i][j]) > Math.abs(m))\r\n {\r\n m = this.elements[i][j];\r\n }\r\n }\r\n }\r\n return m;\r\n }\r\n\r\n indexOf (x)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return null;\r\n }\r\n var index = null, ni = this.elements.length, i, nj = this.elements[0].length, j;\r\n for (i = 0; i < ni; i++)\r\n {\r\n for (j = 0; j < nj; j++)\r\n {\r\n if (this.elements[i][j] === x)\r\n {\r\n return {\r\n i: i+1,\r\n j: j+1\r\n };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n diagonal ()\r\n {\r\n if (!this.isSquare)\r\n {\r\n return null;\r\n }\r\n var els = [], n = this.elements.length;\r\n for (var i = 0; i < n; i++)\r\n {\r\n els.push(this.elements[i][i]);\r\n }\r\n return new Vector(els);\r\n }\r\n\r\n toRightTriangular ()\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return new Matrix([]);\r\n }\r\n var M = this.dup(), els;\r\n var n = this.elements.length, i, j, np = this.elements[0].length, p;\r\n for (i = 0; i < n; i++)\r\n {\r\n if (M.elements[i][i] === 0)\r\n {\r\n for (j = i + 1; j < n; j++)\r\n {\r\n if (M.elements[j][i] !== 0)\r\n {\r\n els = [];\r\n for (p = 0; p < np; p++)\r\n {\r\n els.push(M.elements[i][p] + M.elements[j][p]);\r\n }\r\n M.elements[i] = els;\r\n break;\r\n }\r\n }\r\n }\r\n if (M.elements[i][i] !== 0)\r\n {\r\n for (j = i + 1; j < n; j++)\r\n {\r\n var multiplier = M.elements[j][i] / M.elements[i][i];\r\n els = [];\r\n for (p = 0; p < np; p++)\r\n {\r\n // Elements with column numbers up to an including the number of the\r\n // row that we're subtracting can safely be set straight to zero,\r\n // since that's the point of this routine and it avoids having to\r\n // loop over and correct rounding errors later\r\n els.push(p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier);\r\n }\r\n M.elements[j] = els;\r\n }\r\n }\r\n }\r\n return M;\r\n }\r\n\r\n determinant ()\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return 1;\r\n }\r\n if (!this.isSquare())\r\n {\r\n return null;\r\n }\r\n var M = this.toRightTriangular();\r\n var det = M.elements[0][0], n = M.elements.length;\r\n for (var i = 1; i < n; i++)\r\n {\r\n det = det * M.elements[i][i];\r\n }\r\n return det;\r\n }\r\n\r\n isSingular ()\r\n {\r\n return (this.isSquare() && this.determinant() === 0);\r\n }\r\n\r\n trace ()\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return 0;\r\n }\r\n if (!this.isSquare())\r\n {\r\n return null;\r\n }\r\n var tr = this.elements[0][0], n = this.elements.length;\r\n for (var i = 1; i < n; i++)\r\n {\r\n tr += this.elements[i][i];\r\n }\r\n return tr;\r\n }\r\n\r\n rank ()\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return 0;\r\n }\r\n var M = this.toRightTriangular(), rank = 0;\r\n var i = this.elements.length, nj = this.elements[0].length, j;\r\n while (i--)\r\n {\r\n j = nj;\r\n while (j--)\r\n {\r\n if (Math.abs(M.elements[i][j]) > PRECISION)\r\n {\r\n rank++;\r\n break;\r\n }\r\n }\r\n }\r\n return rank;\r\n }\r\n\r\n augment (matrix)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return this.dup();\r\n }\r\n var M = matrix.elements || matrix;\r\n if (typeof(M[0][0]) === 'undefined')\r\n {\r\n M = new Matrix(M).elements;\r\n }\r\n var T = this.dup(), cols = T.elements[0].length;\r\n var i = T.elements.length, nj = M[0].length, j;\r\n if (i !== M.length)\r\n {\r\n return null;\r\n }\r\n while (i--)\r\n {\r\n j = nj;\r\n while (j--)\r\n {\r\n T.elements[i][cols + j] = M[i][j];\r\n }\r\n }\r\n return T;\r\n }\r\n\r\n inverse ()\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return null;\r\n }\r\n if (!this.isSquare() || this.isSingular())\r\n {\r\n return null;\r\n }\r\n var n = this.elements.length, i= n, j;\r\n var M = this.augment(Matrix.I(n)).toRightTriangular();\r\n var np = M.elements[0].length, p, els, divisor;\r\n var inverse_elements = [], new_element;\r\n // Matrix is non-singular so there will be no zeros on the\r\n // diagonal. Cycle through rows from last to first.\r\n while (i--)\r\n {\r\n // First, normalise diagonal elements to 1\r\n els = [];\r\n inverse_elements[i] = [];\r\n divisor = M.elements[i][i];\r\n for (p = 0; p < np; p++)\r\n {\r\n new_element = M.elements[i][p] / divisor;\r\n els.push(new_element);\r\n // Shuffle off the current row of the right hand side into the results\r\n // array as it will not be modified by later runs through this loop\r\n if (p >= n)\r\n {\r\n inverse_elements[i].push(new_element);\r\n }\r\n }\r\n M.elements[i] = els;\r\n // Then, subtract this row from those above it to give the identity matrix\r\n // on the left hand side\r\n j = i;\r\n while (j--)\r\n {\r\n els = [];\r\n for (p = 0; p < np; p++)\r\n {\r\n els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i]);\r\n }\r\n M.elements[j] = els;\r\n }\r\n }\r\n return new Matrix(inverse_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(p)\r\n {\r\n return (Math.abs(p - x) <= PRECISION) ? x : p;\r\n });\r\n }\r\n\r\n inspect ()\r\n {\r\n var matrix_rows = [];\r\n var n = this.elements.length;\r\n if (n === 0) return '[]';\r\n for (var i = 0; i < n; i++)\r\n {\r\n matrix_rows.push(new Vector(this.elements[i]).inspect());\r\n }\r\n return matrix_rows.join('\\n');\r\n }\r\n\r\n setElements (els)\r\n {\r\n var i, j, elements = els.elements || els;\r\n if (elements[0] && typeof(elements[0][0]) !== 'undefined')\r\n {\r\n i = elements.length;\r\n this.elements = [];\r\n while (i--)\r\n {\r\n j = elements[i].length;\r\n this.elements[i] = [];\r\n while (j--)\r\n {\r\n this.elements[i][j] = elements[i][j];\r\n }\r\n }\r\n return this;\r\n }\r\n var n = elements.length;\r\n this.elements = [];\r\n for (i = 0; i < n; i++)\r\n {\r\n this.elements.push([elements[i]]);\r\n }\r\n return this;\r\n }\r\n\r\n //From glUtils.js\r\n flatten ()\r\n {\r\n var result = [];\r\n if (this.elements.length == 0)\r\n {\r\n return [];\r\n }\r\n\r\n\r\n for (var j = 0; j < this.elements[0].length; j++)\r\n {\r\n for (var i = 0; i < this.elements.length; i++)\r\n {\r\n result.push(this.elements[i][j]);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n //From glUtils.js\r\n ensure4x4 ()\r\n {\r\n if (this.elements.length == 4 && this.elements[0].length == 4)\r\n {\r\n return this;\r\n }\r\n\r\n if (this.elements.length > 4 || this.elements[0].length > 4)\r\n {\r\n return null;\r\n }\r\n\r\n for (var i = 0; i < this.elements.length; i++)\r\n {\r\n for (var j = this.elements[i].length; j < 4; j++)\r\n {\r\n if (i == j)\r\n {\r\n this.elements[i].push(1);\r\n }\r\n else\r\n {\r\n this.elements[i].push(0);\r\n }\r\n }\r\n }\r\n\r\n for (var i = this.elements.length; i < 4; i++)\r\n {\r\n if (i == 0)\r\n {\r\n this.elements.push([1, 0, 0, 0]);\r\n }\r\n else if (i == 1)\r\n {\r\n this.elements.push([0, 1, 0, 0]);\r\n }\r\n else if (i == 2)\r\n {\r\n this.elements.push([0, 0, 1, 0]);\r\n }\r\n else if (i == 3)\r\n {\r\n this.elements.push([0, 0, 0, 1]);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n //From glUtils.js\r\n make3x3 ()\r\n {\r\n if (this.elements.length != 4 || this.elements[0].length != 4)\r\n {\r\n return null;\r\n }\r\n\r\n return new Matrix([[this.elements[0][0], this.elements[0][1], this.elements[0][2]],\r\n [this.elements[1][0], this.elements[1][1], this.elements[1][2]],\r\n [this.elements[2][0], this.elements[2][1], this.elements[2][2]]]);\r\n };\r\n}\r\n\r\nMatrix.I = function(n)\r\n{\r\n var els = [], i = n, j;\r\n while (i--)\r\n {\r\n j = n;\r\n els[i] = [];\r\n while (j--)\r\n {\r\n els[i][j] = (i === j) ? 1 : 0;\r\n }\r\n }\r\n return new Matrix(els);\r\n};\r\n\r\nMatrix.Diagonal = function(elements)\r\n{\r\n var i = elements.length;\r\n var M = Matrix.I(i);\r\n while (i--)\r\n {\r\n M.elements[i][i] = elements[i];\r\n }\r\n return M;\r\n};\r\n\r\nMatrix.Rotation = function(theta, a)\r\n{\r\n if (!a)\r\n {\r\n return new Matrix([\r\n [Math.cos(theta), -Math.sin(theta)],\r\n [Math.sin(theta), Math.cos(theta)]\r\n ]);\r\n }\r\n var axis = a.dup();\r\n if (axis.elements.length !== 3)\r\n {\r\n return null;\r\n }\r\n var mod = axis.modulus();\r\n var x = axis.elements[0]/mod, y = axis.elements[1]/mod, z = axis.elements[2]/mod;\r\n var s = Math.sin(theta), c = Math.cos(theta), t = 1 - c;\r\n // Formula derived here: http://www.gamedev.net/reference/articles/article1199.asp\r\n // That proof rotates the co-ordinate system so theta becomes -theta and sin\r\n // becomes -sin here.\r\n return new Matrix([\r\n [ t*x*x + c, t*x*y - s*z, t*x*z + s*y ],\r\n [ t*x*y + s*z, t*y*y + c, t*y*z - s*x ],\r\n [ t*x*z - s*y, t*y*z + s*x, t*z*z + c ]\r\n ]);\r\n};\r\n\r\nMatrix.RotationX = function(t)\r\n{\r\n var c = Math.cos(t), s = Math.sin(t);\r\n return new Matrix([\r\n [ 1, 0, 0 ],\r\n [ 0, c, -s ],\r\n [ 0, s, c ]\r\n ]);\r\n};\r\nMatrix.RotationY = function(t)\r\n{\r\n var c = Math.cos(t), s = Math.sin(t);\r\n return new Matrix([\r\n [ c, 0, s ],\r\n [ 0, 1, 0 ],\r\n [ -s, 0, c ]\r\n ]);\r\n};\r\nMatrix.RotationZ = function(t)\r\n{\r\n var c = Math.cos(t), s = Math.sin(t);\r\n return new Matrix([\r\n [ c, -s, 0 ],\r\n [ s, c, 0 ],\r\n [ 0, 0, 1 ]\r\n ]);\r\n};\r\n\r\nMatrix.Random = function(n, m)\r\n{\r\n return Matrix.Zero(n, m).map(function()\r\n {\r\n return Math.random();\r\n });\r\n};\r\n\r\n//From glUtils.js\r\nMatrix.Translation = function (v)\r\n{\r\n if (v.elements.length == 2)\r\n {\r\n var r = Matrix.I(3);\r\n r.elements[2][0] = v.elements[0];\r\n r.elements[2][1] = v.elements[1];\r\n return r;\r\n }\r\n\r\n if (v.elements.length == 3)\r\n {\r\n var r = Matrix.I(4);\r\n r.elements[0][3] = v.elements[0];\r\n r.elements[1][3] = v.elements[1];\r\n r.elements[2][3] = v.elements[2];\r\n return r;\r\n }\r\n\r\n throw \"Invalid length for Translation\";\r\n};\r\n\r\nMatrix.Zero = function(n, m)\r\n{\r\n var els = [], i = n, j;\r\n while (i--)\r\n {\r\n j = m;\r\n els[i] = [];\r\n while (j--)\r\n {\r\n els[i][j] = 0;\r\n }\r\n }\r\n return new Matrix(els);\r\n};\r\n\r\nMatrix.prototype.toUpperTriangular = Matrix.prototype.toRightTriangular;\r\nMatrix.prototype.det = Matrix.prototype.determinant;\r\nMatrix.prototype.tr = Matrix.prototype.trace;\r\nMatrix.prototype.rk = Matrix.prototype.rank;\r\nMatrix.prototype.inv = Matrix.prototype.inverse;\r\nMatrix.prototype.x = Matrix.prototype.multiply;"]}