--- ray/src/gen/gensurf.c 1993/11/18 09:33:04 2.4 +++ ray/src/gen/gensurf.c 1994/04/12 15:16:15 2.5 @@ -429,7 +429,7 @@ POINT *p0, *p1, *p2, *p3; eqnmat[3][2] = p3->p[v]; eqnmat[3][3] = 1.0; /* invert matrix (solve system) */ - if (!invmat(eqnmat, eqnmat)) + if (!invmat4(eqnmat, eqnmat)) return(-1); /* no solution */ /* compute result matrix */ for (j = 0; j < 4; j++) @@ -442,64 +442,6 @@ POINT *p0, *p1, *p2, *p3; #undef u #undef v -} - - -/* - * invmat - computes the inverse of mat into inverse. Returns 1 - * if there exists an inverse, 0 otherwise. It uses Gaussian Elimination - * method. - */ - -invmat(inverse,mat) -MAT4 inverse, mat; -{ -#define SWAP(a,b,t) (t=a,a=b,b=t) - - MAT4 m4tmp; - register int i,j,k; - register double temp; - - copymat4(m4tmp, mat); - /* set inverse to identity */ - for (i = 0; i < 4; i++) - for (j = 0; j < 4; j++) - inverse[i][j] = i==j ? 1.0 : 0.0; - - for(i = 0; i < 4; i++) { - /* Look for row with largest pivot and swap rows */ - temp = FTINY; j = -1; - for(k = i; k < 4; k++) - if(ABS(m4tmp[k][i]) > temp) { - temp = ABS(m4tmp[k][i]); - j = k; - } - if(j == -1) /* No replacing row -> no inverse */ - return(0); - if (j != i) - for(k = 0; k < 4; k++) { - SWAP(m4tmp[i][k],m4tmp[j][k],temp); - SWAP(inverse[i][k],inverse[j][k],temp); - } - - temp = m4tmp[i][i]; - for(k = 0; k < 4; k++) { - m4tmp[i][k] /= temp; - inverse[i][k] /= temp; - } - for(j = 0; j < 4; j++) { - if(j != i) { - temp = m4tmp[j][i]; - for(k = 0; k < 4; k++) { - m4tmp[j][k] -= m4tmp[i][k]*temp; - inverse[j][k] -= inverse[i][k]*temp; - } - } - } - } - return(1); - -#undef SWAP }