ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/gen/gensurf.c
(Generate patch)

Comparing ray/src/gen/gensurf.c (file contents):
Revision 2.4 by greg, Thu Nov 18 09:33:04 1993 UTC vs.
Revision 2.5 by greg, Tue Apr 12 15:16:15 1994 UTC

# Line 429 | Line 429 | POINT  *p0, *p1, *p2, *p3;
429          eqnmat[3][2] = p3->p[v];
430          eqnmat[3][3] = 1.0;
431                                          /* invert matrix (solve system) */
432 <        if (!invmat(eqnmat, eqnmat))
432 >        if (!invmat4(eqnmat, eqnmat))
433                  return(-1);                     /* no solution */
434                                          /* compute result matrix */
435          for (j = 0; j < 4; j++)
# Line 442 | Line 442 | POINT  *p0, *p1, *p2, *p3;
442  
443   #undef u
444   #undef v
445 }
446
447
448 /*
449 * invmat - computes the inverse of mat into inverse.  Returns 1
450 * if there exists an inverse, 0 otherwise.  It uses Gaussian Elimination
451 * method.
452 */
453
454 invmat(inverse,mat)
455 MAT4  inverse, mat;
456 {
457 #define SWAP(a,b,t) (t=a,a=b,b=t)
458
459        MAT4  m4tmp;
460        register int i,j,k;
461        register double temp;
462
463        copymat4(m4tmp, mat);
464                                        /* set inverse to identity */
465        for (i = 0; i < 4; i++)
466                for (j = 0; j < 4; j++)
467                        inverse[i][j] = i==j ? 1.0 : 0.0;
468
469        for(i = 0; i < 4; i++) {
470                /* Look for row with largest pivot and swap rows */
471                temp = FTINY; j = -1;
472                for(k = i; k < 4; k++)
473                        if(ABS(m4tmp[k][i]) > temp) {
474                                temp = ABS(m4tmp[k][i]);
475                                j = k;
476                                }
477                if(j == -1)     /* No replacing row -> no inverse */
478                        return(0);
479                if (j != i)
480                        for(k = 0; k < 4; k++) {
481                                SWAP(m4tmp[i][k],m4tmp[j][k],temp);
482                                SWAP(inverse[i][k],inverse[j][k],temp);
483                                }
484
485                temp = m4tmp[i][i];
486                for(k = 0; k < 4; k++) {
487                        m4tmp[i][k] /= temp;
488                        inverse[i][k] /= temp;
489                        }
490                for(j = 0; j < 4; j++) {
491                        if(j != i) {
492                                temp = m4tmp[j][i];
493                                for(k = 0; k < 4; k++) {
494                                        m4tmp[j][k] -= m4tmp[i][k]*temp;
495                                        inverse[j][k] -= inverse[i][k]*temp;
496                                        }
497                                }
498                        }
499                }
500        return(1);
501
502 #undef SWAP
445   }
446  
447  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines