home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 015.lha / tracer_source / support.c < prev    next >
C/C++ Source or Header  |  1986-11-10  |  1KB  |  61 lines

  1. /*
  2.  *    supportive subroutines...
  3.  */
  4.  
  5. #include <math.h>
  6. #include <stdio.h>
  7. #include "MyMath.h"
  8. #include "rtd.h"
  9. #include "extern.h"
  10.  
  11.  
  12. mt (vec, trans)/* make a transpose matrix according to arcane laws 
  13.           hidden in a linear algebra book plus a lot of my own
  14.           sweat. (if you reaaly wanna know, rotate around y axis,
  15.           then z axis.) */
  16. register    struct    vector    *vec;
  17. register    struct    mat    *trans;
  18. {
  19.     if ( SPTst(vec -> xzl) == 0 ) {
  20.         trans -> x.x = SPFlt(0);
  21.         trans -> x.y = SPFlt(1);
  22.         trans -> x.z = SPFlt(0);
  23.         trans -> y.x = SPFlt(-1);
  24.         trans -> y.y = SPFlt(0);
  25.         trans -> y.z = SPFlt(0);
  26.         trans -> z.x = SPFlt(0);
  27.         trans -> z.y = SPFlt(0);
  28.         trans -> z.z = SPFlt(1);
  29.     } else {
  30.         trans -> x.x = SPDiv( (vec -> l), (vec -> x) );
  31.         trans -> x.y = SPDiv( (vec -> l), (vec -> y) );
  32.         trans -> x.z = SPDiv( (vec -> l), (vec -> z) );
  33.  
  34.         trans -> y.x = SPDiv(
  35.                     SPMul(
  36.                         (vec -> l), 
  37.                         (vec -> xzl)
  38.                     ),
  39.                     SPMul(
  40.                         SPNeg(vec -> x),
  41.                         (vec -> y)
  42.                     )
  43.                 );
  44.         trans -> y.y = SPDiv( (vec -> l), (vec -> xzl) );
  45.         trans -> y.z = SPDiv(
  46.                     SPMul(
  47.                         (vec -> l),
  48.                         (vec -> xzl)
  49.                     ),
  50.                     SPMul(
  51.                         SPNeg(vec -> z),
  52.                         (vec -> y)
  53.                     )
  54.                 ); 
  55.  
  56.         trans -> z.x = SPDiv( (vec -> xzl), SPNeg(vec -> z)  );
  57.         trans -> z.y = SPFlt(0);
  58.         trans -> z.z = SPDiv( (vec -> xzl), (vec -> x) );
  59.     }
  60. }
  61.