home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1996 December / PCWKCD1296.iso / sharewar / quake106 / utils / common / mathlib.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-09-12  |  1.7 KB  |  110 lines

  1. // mathlib.c -- math primitives
  2.  
  3. #include "cmdlib.h"
  4. #include "mathlib.h"
  5.  
  6. vec3_t vec3_origin = {0,0,0};
  7.  
  8.  
  9. double VectorLength(vec3_t v)
  10. {
  11.     int        i;
  12.     double    length;
  13.     
  14.     length = 0;
  15.     for (i=0 ; i< 3 ; i++)
  16.         length += v[i]*v[i];
  17.     length = sqrt (length);        // FIXME
  18.  
  19.     return length;
  20. }
  21.  
  22. qboolean VectorCompare (vec3_t v1, vec3_t v2)
  23. {
  24.     int        i;
  25.     
  26.     for (i=0 ; i<3 ; i++)
  27.         if (fabs(v1[i]-v2[i]) > EQUAL_EPSILON)
  28.             return false;
  29.             
  30.     return true;
  31. }
  32.  
  33. vec_t Q_rint (vec_t in)
  34. {
  35.     return floor (in + 0.5);
  36. }
  37.  
  38. void VectorMA (vec3_t va, double scale, vec3_t vb, vec3_t vc)
  39. {
  40.     vc[0] = va[0] + scale*vb[0];
  41.     vc[1] = va[1] + scale*vb[1];
  42.     vc[2] = va[2] + scale*vb[2];
  43. }
  44.  
  45. void CrossProduct (vec3_t v1, vec3_t v2, vec3_t cross)
  46. {
  47.     cross[0] = v1[1]*v2[2] - v1[2]*v2[1];
  48.     cross[1] = v1[2]*v2[0] - v1[0]*v2[2];
  49.     cross[2] = v1[0]*v2[1] - v1[1]*v2[0];
  50. }
  51.  
  52. vec_t _DotProduct (vec3_t v1, vec3_t v2)
  53. {
  54.     return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2];
  55. }
  56.  
  57. void _VectorSubtract (vec3_t va, vec3_t vb, vec3_t out)
  58. {
  59.     out[0] = va[0]-vb[0];
  60.     out[1] = va[1]-vb[1];
  61.     out[2] = va[2]-vb[2];
  62. }
  63.  
  64. void _VectorAdd (vec3_t va, vec3_t vb, vec3_t out)
  65. {
  66.     out[0] = va[0]+vb[0];
  67.     out[1] = va[1]+vb[1];
  68.     out[2] = va[2]+vb[2];
  69. }
  70.  
  71. void _VectorCopy (vec3_t in, vec3_t out)
  72. {
  73.     out[0] = in[0];
  74.     out[1] = in[1];
  75.     out[2] = in[2];
  76. }
  77.  
  78. vec_t VectorNormalize (vec3_t v)
  79. {
  80.     int        i;
  81.     double    length;
  82.     
  83.     length = 0;
  84.     for (i=0 ; i< 3 ; i++)
  85.         length += v[i]*v[i];
  86.     length = sqrt (length);
  87.     if (length == 0)
  88.         return 0;
  89.         
  90.     for (i=0 ; i< 3 ; i++)
  91.         v[i] /= length;    
  92.  
  93.     return length;
  94. }
  95.  
  96. void VectorInverse (vec3_t v)
  97. {
  98.     v[0] = -v[0];
  99.     v[1] = -v[1];
  100.     v[2] = -v[2];
  101. }
  102.  
  103. void VectorScale (vec3_t v, vec_t scale, vec3_t out)
  104. {
  105.     out[0] = v[0] * scale;
  106.     out[1] = v[1] * scale;
  107.     out[2] = v[2] * scale;
  108. }
  109.  
  110.