rendered paste bodyfloat det3(float *matrix3)
{
float det = matrix3[0] * (matrix3[4] * matrix3[8] - matrix3[7] *
matrix3[5]) -
matrix3[1] * (matrix3[3] * matrix3[8] - matrix[6] * matrix[5]) +
matrix3[2] * (matrix3[3] * matrix3[7] - matrix3[6] * matrix3[4]);
return det;
}
void submat(float *matrix4, float *matrix3, int i, int j)
{
int ti, tj, idst, jdst;
for (ti = 0; ti < 4; ti++)
{
if (ti < i)
idst = ti;
else if (ti > i)
idst = ti - 1;
for (tj = 0; tj < 4; tj++)
{
if (tj < j)
jdst = tj;
else if (tj > j)
jdst = tj - 1;
if (ti != i && tj != j)
matrix3[idst * 3 + jdst] = matrix4[ti * 4 + tj];
}
}
}
float det(float *matrix4)
{
float det, result = 0;
i = 1;
float matrix3[9];
int n;
for (n = 0; n < 4; n++, i *= -1)
{
submat(mr, matrix3, 0, n);
det = det3(matrix3);
result += matrix4[n] * det * i;
}
return result;
}
void inverse(float *matrix4a, float *matrix4b)
{
float mdet = det(matrix4a);
float temp[9];
int i, j, sign;
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
{
sign = 1 - ((i + j) % 2) * 2;
submat(matrix4b, mtemp, i, j)
matrix4a[i + j * 4] = (det3(mtemp) * sign) / mdet;
}
}