home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 22 / PCPP #22.iso / Quake2 / q2source_12_11 / utils3 / common / mathlib.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-09  |  2.4 KB  |  153 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. void _VectorScale (vec3_t v, vec_t scale, vec3_t out)
  79. {
  80.     out[0] = v[0] * scale;
  81.     out[1] = v[1] * scale;
  82.     out[2] = v[2] * scale;
  83. }
  84.  
  85. vec_t VectorNormalize (vec3_t in, vec3_t out)
  86. {
  87.     vec_t    length, ilength;
  88.  
  89.     length = sqrt (in[0]*in[0] + in[1]*in[1] + in[2]*in[2]);
  90.     if (length == 0)
  91.     {
  92.         VectorClear (out);
  93.         return 0;
  94.     }
  95.  
  96.     ilength = 1.0/length;
  97.     out[0] = in[0]*ilength;
  98.     out[1] = in[1]*ilength;
  99.     out[2] = in[2]*ilength;
  100.  
  101.     return length;
  102. }
  103.  
  104. vec_t ColorNormalize (vec3_t in, vec3_t out)
  105. {
  106.     float    max, scale;
  107.  
  108.     max = in[0];
  109.     if (in[1] > max)
  110.         max = in[1];
  111.     if (in[2] > max)
  112.         max = in[2];
  113.  
  114.     if (max == 0)
  115.         return 0;
  116.  
  117.     scale = 1.0 / max;
  118.  
  119.     VectorScale (in, scale, out);
  120.  
  121.     return max;
  122. }
  123.  
  124.  
  125.  
  126. void VectorInverse (vec3_t v)
  127. {
  128.     v[0] = -v[0];
  129.     v[1] = -v[1];
  130.     v[2] = -v[2];
  131. }
  132.  
  133. void ClearBounds (vec3_t mins, vec3_t maxs)
  134. {
  135.     mins[0] = mins[1] = mins[2] = 99999;
  136.     maxs[0] = maxs[1] = maxs[2] = -99999;
  137. }
  138.  
  139. void AddPointToBounds (vec3_t v, vec3_t mins, vec3_t maxs)
  140. {
  141.     int        i;
  142.     vec_t    val;
  143.  
  144.     for (i=0 ; i<3 ; i++)
  145.     {
  146.         val = v[i];
  147.         if (val < mins[i])
  148.             mins[i] = val;
  149.         if (val > maxs[i])
  150.             maxs[i] = val;
  151.     }
  152. }
  153.