![]() |
TAPs 0.7.7.3
|
00001 /****************************************************************************** 00002 TAPsVector.hpp 00003 00004 Vector class is a generic class for vectors -- a base class. 00005 00006 SUKITTI PUNAK (09/05/2004) 00007 UPDATE (09/07/2004) 00008 ******************************************************************************/ 00009 #ifndef TAPs_VECTOR_HPP 00010 #define TAPs_VECTOR_HPP 00011 00012 #include "TAPsMath.hpp" 00013 00014 BEGIN_NAMESPACE_TAPs 00015 //============================================================================= 00016 template <typename T, int N> 00017 class Vector { 00018 //============================================================================= 00019 protected: 00020 // Vector Coordinates 00021 T t[N]; 00022 00023 public: 00024 //------------------------------------------------------------------------- 00025 // Output Operator << 00026 friend std::ostream & operator<< ( std::ostream &output, Vector<T,N> const &v ) 00027 { 00028 //output << typeid(*this).name() << "( "; 00029 output << "Vector<" << typeid(T).name() << "," << N << ">( "; 00030 int i; 00031 for ( i = 0; i < N-1; ++i ) 00032 { 00033 output << v.t[i] << ", "; 00034 } 00035 output << v.t[i] << " )'"; //<< std::endl; 00036 return output; 00037 } 00038 //------------------------------------------------------------------------- 00039 // Constructors and Destructor 00040 Vector (); 00041 Vector ( T const af[N] ); 00042 Vector ( Vector<T,N> const &v ); 00043 //------------------------------------------------------------------------- 00044 // Member Access 00045 inline T & operator[] ( int i ); 00046 inline T const & operator[] ( int i ) const; 00047 //operator T * (); 00048 //------------------------------------------------------------------------- 00049 // Assignment Operator 00050 inline Vector<T,N> & operator= ( Vector<T,N> const &v ); 00051 //------------------------------------------------------------------------- 00052 // Comparison Operators 00053 inline bool operator== ( Vector<T,N> const &v ) const; 00054 inline bool operator!= ( Vector<T,N> const &v ) const; 00055 inline bool operator<= ( Vector<T,N> const &v ) const; 00056 inline bool operator< ( Vector<T,N> const &v ) const; 00057 inline bool operator>= ( Vector<T,N> const &v ) const; 00058 inline bool operator> ( Vector<T,N> const &v ) const; 00059 //------------------------------------------------------------------------- 00060 // Arithmetic Operators 00061 inline Vector<T,N> operator- () const; // negation 00062 inline Vector<T,N> operator+ ( Vector<T,N> const &v ) const; 00063 inline Vector<T,N> operator- ( Vector<T,N> const &v ) const; 00064 inline Vector<T,N> operator* ( T s ) const; 00065 inline Vector<T,N> operator/ ( T s ) const; 00066 friend inline Vector<T,N> operator* ( T s, Vector<T,N> const &v ) { return v*s; } 00067 //------------------------------------------------------------------------- 00068 // Arithmetic Update Operators 00069 inline Vector<T,N> & operator+= ( Vector<T,N> const &v ); 00070 inline Vector<T,N> & operator-= ( Vector<T,N> const &v ); 00071 inline Vector<T,N> & operator*= ( T s ); 00072 inline Vector<T,N> & operator/= ( T s ); 00073 //------------------------------------------------------------------------- 00074 // Vector Operations 00075 inline T Length () const; 00076 inline T SquaredLength () const; 00077 inline Vector<T,N> GetUnit ( T tolerance = TAPs::Math<T>::EPSILON ) const; 00078 inline Vector<T,N> & Normalized ( T tolerance = TAPs::Math<T>::EPSILON ); 00079 inline T Dot ( Vector<T,N> const &v ) const; // Dot Product 00080 inline T operator* ( Vector<T,N> const &v ) const ; // Dot Product Operator 00081 //inline Vector<T,N> Cross ( Vector<T,N> const &v ) const; // Cross Product 00082 //inline Vector<T,N> operator% ( Vector<T,N> const &v ) const; // Cross Product Operator 00083 }; // END CLASS Vector 00084 //============================================================================= 00085 00086 /* 00087 //============================================================================= 00088 // Global Functions 00089 //----------------------------------------------------------------------------- 00090 // Std Output Via << Operator 00091 template <typename T, int N> 00092 std::ostream & operator<< ( std::ostream &output, Vector<T,N> const &v ); 00093 //----------------------------------------------------------------------------- 00094 */ 00095 00096 //============================================================================= 00097 END_NAMESPACE_TAPs 00098 //----------------------------------------------------------------------------- 00099 // Include definition if TAPs_USE_EXPORT is not defined 00100 //#if !defined( TAPs_USE_EXPORT ) 00101 #include "TAPsVector.cpp" 00102 //#endif 00103 //----------------------------------------------------------------------------- 00104 #endif 00105 //345678901234567890123456789012345678901234567890123456789012345678901234567890 00106 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8