home *** CD-ROM | disk | FTP | other *** search
/ Current Shareware 1994 January / SHAR194.ISO / graphuti / frgen14.zip / SOURCE.ZIP / VECT.H < prev   
C/C++ Source or Header  |  1993-08-01  |  2KB  |  90 lines

  1. #ifndef __VECTOR_H
  2. #define __VECTOR_H
  3.  
  4. #include <math.h>
  5. #include <fstream.h>
  6.  
  7. #define DOT   %
  8. #define CROSS *
  9.  
  10. class Vector {
  11.     public:
  12.       static char delim;
  13.       static void set_delim (char new_delim) { delim = new_delim; }
  14.  
  15.       float x, y, z;
  16.  
  17.       Vector() {x = 0.0; y = 0.0; z = 0.0;}
  18.       Vector (float NewX, float NewY, float NewZ)
  19.            {x = NewX; y = NewY; z = NewZ;}
  20.  
  21.       friend Vector operator+ (Vector v1, Vector v2);
  22.       friend Vector operator- (Vector v1, Vector v2);
  23.       friend Vector operator- (Vector v);
  24.       friend Vector operator* (Vector v1, Vector v2);
  25.       friend float  operator% (Vector v1, Vector v2);
  26.       friend Vector operator* (float N, Vector v);
  27.       friend Vector operator* (Vector v, float N);
  28.       friend Vector operator/ (Vector v, float N);
  29.       friend Vector min (const Vector &v1, const Vector &v2);
  30.       friend Vector max (const Vector &v1, const Vector &v2);
  31.       friend float  mag (Vector v);
  32.       friend float  angle (const Vector &v1, const Vector &v2);
  33.  
  34.       friend ostream& operator<< (ostream& f, const Vector& v);
  35. };
  36.  
  37. inline float mag (Vector v)
  38. {
  39.     return (sqrt(v.x*v.x + v.y*v.y + v.z*v.z));
  40. }
  41.  
  42. inline Vector operator+ (Vector v1, Vector v2)
  43. {
  44.     return Vector (v1.x + v2.x, v1.y + v2.y, v1.z + v2.z);
  45. }
  46.  
  47. inline Vector operator- (Vector v1, Vector v2)
  48. {
  49.     return Vector (v1.x - v2.x, v1.y - v2.y, v1.z - v2.z);
  50. }
  51.  
  52. inline Vector operator- (Vector v)
  53. {
  54.     return Vector (-v.x, -v.y, -v.z);
  55. }
  56.  
  57. inline Vector operator* (Vector v1, Vector v2)
  58. {
  59.     Vector Temp;
  60.  
  61.     Temp.x = (v1.z * v2.y) - (v1.y * v2.z);
  62.     Temp.y = (v1.x * v2.z) - (v1.z * v2.x);
  63.     Temp.z = (v1.y * v2.x) - (v1.x * v2.y);
  64.  
  65.     return Temp;
  66. }
  67.  
  68. inline float operator% (Vector v1, Vector v2)
  69. {
  70.     return (v1.x*v2.x) + (v1.y*v2.y) + (v1.z*v2.z);
  71. }
  72.  
  73. inline Vector operator* (float N, Vector v)
  74. {
  75.     return Vector (N*v.x, N*v.y, N*v.z);
  76. }
  77.  
  78. inline Vector operator* (Vector v, float N)
  79. {
  80.     return Vector (N*v.x, N*v.y, N*v.z);
  81. }
  82.  
  83.  
  84. inline Vector operator/ (Vector v, float N)
  85. {
  86.     return Vector (v.x/N, v.y/N, v.z/N);
  87. }
  88.  
  89. #endif
  90.