* 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)
| 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 | } |