home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 10 / ioProg_10.iso / soft / optima / samples.z / GRVECTOR.HPP < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-23  |  3.7 KB  |  104 lines

  1. #ifndef _GRVECTOR_H
  2. #define _GRVECTOR_H
  3.  
  4. #include "grDefines.hpp"
  5.  
  6. class grVector                          // REPRESENT VECTOR FOR OPERATIONS
  7. {
  8. public:
  9.  
  10.     grVector( void );                   // DEFAULT CTOR
  11.  
  12.     grVector(                           // BUILD FROM COORDINATES
  13.         double x, double y,             // -- x, y location
  14.         double z,                       // -- z value
  15.         double h = 0.0 );               // -- homogoneous scaling factor
  16.     
  17.     grVector operator +=(               // ADD ANOTHER VECTOR
  18.         const grVector & o );           // -- vector to add
  19.  
  20.     friend grVector operator *(         // MULTIPLY BY SCALAR
  21.         double s,                       // -- scalar value
  22.         const grVector & vec );         // -- vector to multiply
  23.  
  24.     friend grVector operator +(         // ADD TWO VECTORS
  25.         const grVector & v1,            // -- vector 1
  26.         const grVector & v2 );          // -- vector 2
  27.  
  28.     friend grVector operator -(         // SUBTRACT TWO VECTORS
  29.         const grVector & v1,            // -- vector 1
  30.         const grVector & v2 );          // -- vector 2
  31.  
  32.     friend double dot(                  // PERFORM DOT PRODUCT
  33.         const grVector & v1,            // -- vector one
  34.         const grVector & v2 );          // -- vector to dot with
  35.  
  36.     friend grVector cross(              // PERFORM CROSS PRODUCT (this X o)
  37.         const grVector & v1,            // -- vector one
  38.         const grVector & v2 );          // -- vector to dot with
  39.  
  40.     double length( void ) const;        // FIND THE LENGTH
  41.  
  42.     void normalize( void );             // NORMALIZE THE VECTOR
  43.  
  44.     void fixup( void );                 // DIVIDE THROUGH BY h
  45.  
  46.     double x( void ) const { return _coords[ 0 ]; }
  47.     double y( void ) const { return _coords[ 1 ]; }
  48.     double z( void ) const { return _coords[ 2 ]; }
  49.     double h( void ) const { return _coords[ 3 ]; }
  50.  
  51.     void x( double nx ) { _coords[ 0 ] = nx; }
  52.     void y( double ny ) { _coords[ 1 ] = ny; }
  53.     void z( double nz ) { _coords[ 2 ] = nz; }
  54.     void h( double nh ) { _coords[ 3 ] = nh; }
  55.  
  56. public:
  57.  
  58.     double _coords[ 4 ];         // x, y, z, h
  59. };
  60.  
  61. class grPoint3                          // REPRESENT POINT FOR OPERATIONS
  62. {
  63. public:
  64.  
  65.     grPoint3();                         // DEFAULT CTOR
  66.  
  67.     grPoint3(                           // BUILD FROM COORDINATES
  68.         double x, double y,             // -- x, y location
  69.         double z,                       // -- z value
  70.         double h = 1.0 );               // -- homogoneous scaling factor
  71.  
  72.     friend grPoint3 operator *(         // MULTIPLY BY SCALAR
  73.         double s,                       // -- scalar value
  74.         const grPoint3 & vec );         // -- vector to multiply
  75.  
  76.     friend grPoint3 operator +(         // ADD VECTOR TO POINT
  77.         const grPoint3 & p1,            // -- point 1
  78.         const grVector & v1 );          // -- vector 1
  79.  
  80.     friend grVector operator -(         // SUBTRACT POINTS, GIVING VECTOR
  81.         const grPoint3 & p1,            // -- point 1
  82.         const grPoint3 & p2 );          // -- point 2
  83.  
  84.     void fixup( void );                 // DIVIDE THROUGH BY h
  85.  
  86.     double x( void ) const { return _coords[ 0 ]; }
  87.     double y( void ) const { return _coords[ 1 ]; }
  88.     double z( void ) const { return _coords[ 2 ]; }
  89.     double h( void ) const { return _coords[ 3 ]; }
  90.  
  91.     void x( double nx ) { _coords[ 0 ] = nx; }
  92.     void y( double ny ) { _coords[ 1 ] = ny; }
  93.     void z( double nz ) { _coords[ 2 ] = nz; }
  94.     void h( double nh ) { _coords[ 3 ] = nh; }
  95.  
  96. public:
  97.  
  98.     double _coords[ 4 ];         // x, y, z, h
  99. };
  100.  
  101. const grPoint3  grPoint3Origin(0,0,0);
  102.  
  103. #endif // _GRVECTOR_H //
  104.