Vector2.h

Go to the documentation of this file.
00001 /***************************************************************
00002  
00003  Mini Grand Challenge 2010
00004  Pennsylvania State University - Robotics Club
00005  Learn more at www.psurobotics.org
00006  Protected by the GNU General Public License
00007  
00008  This source file is developed and maintained by:
00009  + Jeremy Bridon jgbridon@gmail.com
00010  
00011  File: Vector2.h
00012  Desc: Two-element tuple generic template class. Overloads most
00013  operators.
00014  
00015 ***************************************************************/
00016 
00017 // Inclusion guard
00018 #ifndef __VECTOR2_H_
00019 #define __VECTOR2_H_
00020 
00021 // Includes
00022 #include "Utilities.h"
00023 
00025 template <typename Type> class Vector2
00026 {
00027 public:
00028 
00029         // Constructor
00030         Vector2()
00031         {
00032                 x = (Type)0;
00033                 y = (Type)0;
00034         }
00035 
00036         // Constructor
00037         Vector2(Type x, Type y)
00038         {
00039                 this->x = x;
00040                 this->y = y;
00041         }
00042 
00043         // Copy constructor
00044         Vector2(const Vector2 &obj)
00045         {
00046                 x = obj.x;
00047                 y = obj.y;
00048         }
00049 
00050         // Deconstructor
00051         ~Vector2()
00052         {
00053                 // Nothing to do...
00054         }
00055 
00056         // Overloaded '=' operator
00057         Vector2 operator= (const Vector2 &obj)
00058         {
00059                 x = obj.x;
00060                 y = obj.y;
00061                 return *this;
00062         }
00063 
00064         // Overloaded '+' operator
00065         Vector2 operator+ (const Vector2 &obj)
00066         {
00067                 return Vector2<Type>(x + obj.x, y + obj.y);
00068         }
00069 
00070         // Overloaded '-' operator
00071         Vector2 operator- (const Vector2 &obj)
00072         {
00073                 return Vector2<Type>(x - obj.x, y - obj.y);
00074         }
00075 
00076         // Overloaded '*' operator
00077         Vector2 operator* (const Vector2 &obj)
00078         {
00079                 return Vector2<Type>(x * obj.x, y * obj.y);
00080         }
00081 
00082         // Overloaded '/' operator
00083         Vector2 operator/ (const Vector2 &obj)
00084         {
00085                 return Vector2<Type>(x / obj.x, y / obj.y);
00086         }
00087 
00088         // Overloaded '+=' operator
00089         Vector2& operator+= (const Vector2 &obj)
00090         {
00091                 *this = *this + obj;
00092                 return *this;
00093         }
00094 
00095         // Overloaded '-=' operator
00096         Vector2& operator-= (const Vector2 &obj)
00097         {
00098                 *this = *this - obj;
00099                 return *this;
00100         }
00101 
00102         // Overloaded '*=' operator
00103         Vector2& operator*= (const Vector2 &obj)
00104         {
00105                 *this = *this * obj;
00106                 return *this;
00107         }
00108 
00109         // Overloaded '/=' operator
00110         Vector2& operator/= (const Vector2 &obj)
00111         {
00112                 *this = *this / obj;
00113                 return *this;
00114         }
00115 
00116         // overloaded '==' operator
00117         bool operator== (const Vector2 &obj)
00118         {
00119                 if(obj.x == x && obj.y == y)
00120                         return true;
00121                 else
00122                         return false;
00123         }
00124 
00125         // Returns the length of this vector
00126         double GetLength()
00127         {
00128                 double X = (double)x;
00129                 double Y = (double)y;
00130                 return sqrt(X*X + Y*Y);
00131         }
00132 
00133         // Public types
00134         Type x, y;
00135 
00136 };
00137 
00139 template <typename Type> Vector2<Type> V2Min(const Vector2<Type> obj1, const Vector2<Type> obj2)
00140 {
00141         return Vector2<Type>(min(obj1.x, obj2.x), min(obj1.y, obj2.y));
00142 }
00143 
00145 template <typename Type> Vector2<Type> V2Max(const Vector2<Type> obj1, const Vector2<Type> obj2)
00146 {
00147         return Vector2<Type>(max(obj1.x, obj2.x), max(obj1.y, obj2.y));
00148 }
00149 
00150 #endif

Generated on Sun Feb 21 00:00:08 2010 for Penn State Robotics Club: Mini Grand Challenge 2010 by  doxygen 1.5.5