home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / modelers / geomview / source.lha / Geomview / src / lib / gprim / discgrp / xform.c < prev   
Encoding:
Text File  |  1993-02-16  |  959 b   |  54 lines

  1. typedef    double  point4[4];
  2. typedef    double  plane4[4];
  3. typedef    double  matrix4[4][4];
  4.  
  5. matvecmul4(m,v1,v2)
  6. matrix4 m;
  7. point4 v1,v2;
  8. {
  9.     register int i,j,k;
  10.     double tmp[4], *tv1, *tv2;
  11.  
  12.     tv1 = (double *) v1; 
  13.     tv2 = (double *) v2;
  14.     for (i=0; i<4; ++i)
  15.     for (tmp[i]=0, j = 0; j<4; ++j)
  16.         tmp[i] += m[i][j] * tv1[j];
  17.     for (i=0; i<4; ++i)
  18.     tv2[i] = tmp[i];
  19. }
  20.  
  21. vecmatmul4(v1,m,v2)
  22. matrix4 m;
  23. point4 v1,v2;
  24. {
  25.     register int i,j,k;
  26.     double tmp[4], *tv1, *tv2;
  27.  
  28.     tv1 = (double *) v1; 
  29.     tv2 = (double *) v2;
  30.     for (i=0; i<4; ++i)
  31.     for (tmp[i]=0, j = 0; j<4; ++j)
  32.         tmp[i] += m[j][i] * tv1[j];
  33.     for (i=0; i<4; ++i)
  34.     tv2[i] = tmp[i];
  35. }
  36.  
  37. matmatmul4 (mat1, mat2, mat3)
  38. matrix4 mat1, mat2, mat3;
  39.  
  40. {
  41.     register int i, j, k;
  42.     double tmp[4];
  43.  
  44.     for (i = 0; i < 4; i++) {
  45.     for (j = 0; j < 4; j++) {
  46.         tmp[j] = 0.0;
  47.         for (k = 0; k < 4; k++) {
  48.         tmp[j] += mat1[i][k] * mat2[k][j];
  49.         }
  50.         mat3[i][j] = tmp[j];
  51.     }
  52.     }
  53. }
  54.