home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume18 / mtvraytrace / part01 / vector.c < prev   
Encoding:
C/C++ Source or Header  |  1989-03-26  |  1.7 KB  |  113 lines

  1. /***********************************************************************
  2.  * $Author: markv $
  3.  * $Revision: 1.1 $
  4.  * $Date: 88/09/11 11:00:46 $
  5.  * $Log:    vector.c,v $
  6.  * Revision 1.1  88/09/11  11:00:46  markv
  7.  * Initial revision
  8.  * 
  9.  ***********************************************************************/
  10. #include <stdio.h>
  11. #include <math.h>
  12. #include "defs.h"
  13. #include "extern.h"
  14.  
  15. Flt 
  16. VecNormalize(vec)
  17.  Vec vec ;
  18. {
  19.     Flt len ;
  20.     len = (Flt) VecLen(vec);
  21.     vec[0]/=len ;
  22.     vec[1]/=len ;
  23.     vec[2]/=len ;
  24.     return(len) ;
  25. }
  26.  
  27. #ifdef DUMB_CPP
  28. /*
  29.  * Some machines can't handle all the vector operations, so if we define
  30.  * DUMB_CPP, we replace them with equivalent function calls...
  31.  */
  32.  
  33. MakeVector(x, y, z, v)
  34.  Flt x, y, z ;
  35.  Vec v ;
  36. {
  37.     v[0] = x ; v[1] = y ; v[2] = z ;
  38. }
  39.  
  40. VecNegate(v)
  41.  Vec v ;
  42. {
  43.     v[0] = -v[0] ;
  44.     v[1] = -v[1] ;
  45.     v[2] = -v[2] ;
  46. }
  47.  
  48. Flt 
  49. VecDot(a, b)
  50.  Vec a, b ;
  51. {
  52.     return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] ;
  53. }
  54.  
  55. Flt
  56. VecLen(a)
  57.  Vec a;
  58. {
  59.     return sqrt(VecDot(a, a)) ;
  60. }
  61.  
  62. VecCopy(a, b) 
  63.  Vec a, b ;
  64. {
  65.     b[0] = a[0] ;
  66.     b[1] = a[1] ;
  67.     b[2] = a[2] ;
  68. }
  69.  
  70. VecAdd(a, b, c)
  71.  Vec a, b, c ;
  72. {
  73.     c[0] = a[0] + b[0] ;
  74.     c[1] = a[1] + b[1] ;
  75.     c[2] = a[2] + b[2] ;
  76. }
  77.  
  78. VecSub(a, b, c)
  79.  Vec a, b, c ;
  80. {
  81.     c[0] = a[0] - b[0] ;
  82.     c[1] = a[1] - b[1] ;
  83.     c[2] = a[2] - b[2] ;
  84. }
  85.  
  86. VecComb(A, a, B, b, c)
  87.  Flt A, B ;
  88.  Vec a, b, c ;
  89. {
  90.     c[0] = A * a[0] + B * b[0] ;    
  91.     c[1] = A * a[1] + B * b[1] ;    
  92.     c[2] = A * a[2] + B * b[2] ;    
  93. }
  94.  
  95. VecAddS(A, a, b, c)
  96.  Flt A ;
  97.  Vec a, b, c ;
  98. {
  99.     c[0] = A * a[0] + b[0] ;    
  100.     c[1] = A * a[1] + b[1] ;    
  101.     c[2] = A * a[2] + b[2] ;    
  102. }
  103.  
  104. VecCross(a, b, c)
  105.  Vec a, b, c ;
  106. {
  107.     c[0] = a[1] * b[2] - a[2] * b[1] ;
  108.     c[1] = a[2] * b[0] - a[0] * b[2] ;
  109.     c[2] = a[0] * b[1] - a[1] * b[0] ;
  110. }
  111.  
  112. #endif /* DUMB_CPP */
  113.