home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Games / flying-6.11 / vector.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-30  |  3.0 KB  |  141 lines

  1. #ifndef _vector_h
  2. #define _vector_h
  3.  
  4. #ifndef _real_h
  5. #    include "real.h"
  6. #endif
  7.  
  8. //
  9. // -------------------------------------------------------------------------
  10. // class Vector : Vektorklasse fⁿr beliebig dimensionierte Vektoren
  11. // -------------------------------------------------------------------------
  12. //
  13.  
  14. class Vec2;
  15. class Vec3;
  16.  
  17. class Vector {
  18.     protected:
  19.         short    dim;
  20.         Real    *data;
  21.         static Real    ErrorZero;
  22.  
  23.     public:
  24.         Vector()                                    { dim=0; }
  25.         Vector( int n, double d0, ... );
  26.         Vector( const Vector &v );
  27. #if (Vec2IsVector==0)
  28.         Vector( const Vec2 &v );
  29. #endif
  30. #if (Vec3IsVector==0)
  31.         Vector( const Vec3 &v );
  32. #endif
  33.         ~Vector()                                { if (dim)    delete [] data; }
  34.  
  35.     void show(const char *str=0) const;
  36.  
  37.     protected:
  38.         void Resize(int i);
  39.         Real &GetRef(int i);
  40.     public:
  41.         const Real &operator()(int i) const
  42.                 { return (i>=0&&i<dim)?data[i]:ErrorZero; }
  43.         Real &operator[](int i)
  44.                 { return (i>=0&&i<dim)?data[i]:GetRef(i); }
  45.  
  46.         int    IsZero() const;
  47.  
  48.         Real SqrNorm() const;
  49.         Real Norm() const;
  50.         Vector Norm1() const;
  51.  
  52.  
  53.     const Vector& operator=(const Vector &v);        // Copy
  54.     const Vector& operator<<=(Vector &v);            // Move
  55.  
  56.     inline Vector operator+(const Vector&) const;
  57.     inline Vector operator-(const Vector&) const;
  58.  
  59.     friend Real operator*(const Vector&, const Vector&);
  60.     inline Vector operator*(const Real&) const;
  61.     friend inline Vector operator*(const Real&, const Vector&);
  62.     inline Vector operator/(const Real&) const;
  63.  
  64.     friend int operator==(const Vector&, const Vector&);
  65.     friend inline int operator!=(const Vector&, const Vector&);
  66.     const Vector& operator+=(const Vector&);
  67.     const Vector& operator-=(const Vector&);
  68.     const Vector& operator*=(const Real&);
  69.     const Vector& operator/=(const Real&);
  70.     inline Vector operator+() const;
  71.     inline Vector operator-() const;
  72.  
  73.  
  74. friend class Matrix;
  75.     friend Vector operator*(const class Matrix& m, const Vector& v);
  76.     friend Vector operator*(const Vector& v, const class Matrix& m);
  77.     friend int system_calc(class Matrix &a, Vector *x, Vector &b);
  78. };
  79.  
  80. inline Vector Vector::operator+() const
  81. {
  82.     return *this;
  83. }
  84. inline Vector Vector::operator-() const
  85. {
  86. Vector    v(*this);
  87.     return v*=Real(-1.0);
  88. }
  89.  
  90.  
  91. // Definitions of non-member binary operator functions
  92.  
  93. inline Vector Vector::operator+(const Vector& z2) const
  94. {
  95.     if (dim>z2.dim) {
  96.         Vector    v(*this);
  97.                     return v+=z2;
  98.     }
  99.     else {
  100.         Vector    v(z2);
  101.                     return v+=*this;
  102.     }
  103. }
  104. inline Vector Vector::operator-(const Vector& z2) const
  105. {
  106. Vector    v(*this);
  107.             return v-=z2;
  108. }
  109.  
  110. inline Vector Vector::operator*(const Real& r) const
  111. {
  112. Vector    erg(*this);
  113.             erg *= r;
  114.             return erg;
  115. }
  116.  
  117. inline Vector Vector::operator/(const Real& r) const
  118. {
  119. Vector    erg(*this);
  120.             erg /= r;
  121.             return erg;
  122. }
  123.  
  124.  
  125. inline Vector operator*(const Real& val, const Vector& z2)
  126. {
  127.         return z2*val;        // kommutativ
  128. }
  129.  
  130. inline int operator!=(const Vector& z1, const Vector& z2)
  131. {
  132.         return !(z1==z2);
  133. }
  134.  
  135. inline Real Vector::Norm() const                    { return sqrt(SqrNorm()); }
  136. inline Vector Vector::Norm1() const                { return *this / Norm(); }
  137.  
  138. extern Vector VectorZero;
  139.  
  140. #endif
  141.