这是John Carmack用于计算4x4矩阵的行列式的方法.根据我的调查,我已经确定它开始像拉普拉斯扩展定理,然后继续计算3x3决定因素,这似乎与我读过的任何论文都不一致.
// 2x2 sub-determinants
float det2_01_01 = mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0];
float det2_01_02 = mat[0][0] * mat[1][2] - mat[0][2] * mat[1][0];
float det2_01_03 = mat[0][0] * mat[1][3] - mat[0][3] * mat[1][0];
float det2_01_12 = mat[0][1] * mat[1][2] - mat[0][2] * mat[1][1];
float det2_01_13 = mat[0][1] * mat[1][3] - mat[0][3] * mat[1][1];
float det2_01_23 = mat[0][2] * mat[1][3] - mat[0][3] * mat[1][2];
// 3x3 sub-determinants
float det3_201_012 = mat[2][0] * det2_01_12 - mat[2][1] * det2_01_02 + mat[2][2] * det2_01_01;
float det3_201_013 = mat[2][0] * det2_01_13 - mat[2][1] * det2_01_03 + mat[2][3] * det2_01_01;
float det3_201_023 = mat[2][0] * det2_01_23 - mat[2][2] * det2_01_03 + mat[2][3] * det2_01_02;
float det3_201_123 = mat[2][1] * det2_01_23 - mat[2][2] * det2_01_13 + mat[2][3] * det2_01_12;
return ( - det3_201_123 * mat[3][0] + det3_201_023 * mat[3][1] - det3_201_013 * mat[3][2] + det3_201_012 * mat[3][3] );
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释这种方法是如何工作的,还是指向一个使用相同方法的好写作?
注意
如果重要,这个矩阵是行主要的.
这似乎是涉及使用未成年人的方法.数学方面可以在维基百科上找到
http://en.wikipedia.org/wiki/Determinant#Properties_characterizing_the_determinant
基本上你将矩阵缩小到更小,更容易计算,并将这些结果加起来(它涉及一些(-1)因子,应该在我链接到的页面上描述).