MCPcopy
hub / github.com/processing/p5.js / #invert4x4

Method #invert4x4

src/math/Matrices/Matrix.js:1886–1964  ·  view source on GitHub ↗

* Only 4x4 becasuse determinant is only 4x4 currently * invert matrix according to a give matrix * @param {p5.Matrix|Float32Array|Number[]} a the matrix to be * based on to invert * @private * @chainable

(a)

Source from the content-addressed store, hash-verified

1884 * @chainable
1885 */
1886 #invert4x4(a) {
1887 let a00, a01, a02, a03, a10, a11, a12, a13;
1888 let a20, a21, a22, a23, a30, a31, a32, a33;
1889 if (a instanceof Matrix) {
1890 a00 = a.matrix[0];
1891 a01 = a.matrix[1];
1892 a02 = a.matrix[2];
1893 a03 = a.matrix[3];
1894 a10 = a.matrix[4];
1895 a11 = a.matrix[5];
1896 a12 = a.matrix[6];
1897 a13 = a.matrix[7];
1898 a20 = a.matrix[8];
1899 a21 = a.matrix[9];
1900 a22 = a.matrix[10];
1901 a23 = a.matrix[11];
1902 a30 = a.matrix[12];
1903 a31 = a.matrix[13];
1904 a32 = a.matrix[14];
1905 a33 = a.matrix[15];
1906 } else if (isMatrixArray(a)) {
1907 a00 = a[0];
1908 a01 = a[1];
1909 a02 = a[2];
1910 a03 = a[3];
1911 a10 = a[4];
1912 a11 = a[5];
1913 a12 = a[6];
1914 a13 = a[7];
1915 a20 = a[8];
1916 a21 = a[9];
1917 a22 = a[10];
1918 a23 = a[11];
1919 a30 = a[12];
1920 a31 = a[13];
1921 a32 = a[14];
1922 a33 = a[15];
1923 }
1924 const b00 = a00 * a11 - a01 * a10;
1925 const b01 = a00 * a12 - a02 * a10;
1926 const b02 = a00 * a13 - a03 * a10;
1927 const b03 = a01 * a12 - a02 * a11;
1928 const b04 = a01 * a13 - a03 * a11;
1929 const b05 = a02 * a13 - a03 * a12;
1930 const b06 = a20 * a31 - a21 * a30;
1931 const b07 = a20 * a32 - a22 * a30;
1932 const b08 = a20 * a33 - a23 * a30;
1933 const b09 = a21 * a32 - a22 * a31;
1934 const b10 = a21 * a33 - a23 * a31;
1935 const b11 = a22 * a33 - a23 * a32;
1936
1937 // Calculate the determinant
1938 let det =
1939 b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
1940
1941 if (!det) {
1942 return null;
1943 }

Callers 1

invertMethod · 0.95

Calls 1

isMatrixArrayFunction · 0.70

Tested by

no test coverage detected