$search
00001 /* 00002 * Copyright (C) 2009 00003 * Robert Bosch LLC 00004 * Research and Technology Center North America 00005 * Palo Alto, California 00006 * 00007 * All rights reserved. 00008 * 00009 *------------------------------------------------------------------------------ 00010 * project ....: Autonomous Technologies 00011 * file .......: rtcVec2.h 00012 * authors ....: Benjamin Pitzer 00013 * organization: Robert Bosch LLC 00014 * creation ...: 08/16/2006 00015 * modified ...: $Date: 2009-01-21 18:19:16 -0800 (Wed, 21 Jan 2009) $ 00016 * changed by .: $Author: benjaminpitzer $ 00017 * revision ...: $Revision: 14 $ 00018 */ 00019 #ifndef RTC_VEC2_H 00020 #define RTC_VEC2_H 00021 00022 //== INCLUDES ================================================================== 00023 #include "rtc/rtcMath.h" 00024 #include "rtc/rtcVec.h" 00025 00026 //== NAMESPACES ================================================================ 00027 namespace rtc { 00028 00029 // Forward declarations 00030 template <class T, int M> class Vec; // M-d vector 00031 template <class T> class Vec2; // 2d Vector 00032 00036 template <class T> 00037 class Vec2: public Vec<T,2> { 00038 public: 00039 // Constructors 00040 Vec2(); 00041 Vec2(const T* d); 00042 Vec2(const T a); 00043 Vec2(const T x0, const T x1); 00044 Vec2(const Vec<T,2>& v); 00045 00046 // Cast Operation 00047 template <class U> Vec2(const Vec<U,2>& v); 00048 00049 // Mutators 00050 void set(const T x0, const T x1); 00051 00052 // Perp Operator 00053 Vec2<T> perp() const; 00054 00055 // inherit member data and functions of parent 00056 using Vec<T,2>::x; 00057 using Vec<T,2>::set; 00058 }; 00059 00060 // Declare a few common typdefs 00061 typedef Vec2<bool> Vec2b; 00062 typedef Vec2<char> Vec2c; 00063 typedef Vec2<unsigned char> Vec2uc; 00064 typedef Vec2<int> Vec2i; 00065 typedef Vec2<float> Vec2f; 00066 typedef Vec2<double> Vec2d; 00067 00068 //============================================================================== 00069 // Vec2<T> 00070 //============================================================================== 00071 00072 // Constructors 00073 00076 template <class T> 00077 inline Vec2<T>::Vec2() { 00078 } 00079 00082 template <class T> 00083 inline Vec2<T>::Vec2(const T* d) : Vec<T,2>(d) {} 00084 00087 template <class T> 00088 inline Vec2<T>::Vec2(const T a) : Vec<T,2>(a) {} 00089 00092 template <class T> 00093 inline Vec2<T>::Vec2(const T x0, const T x1) { 00094 set(x0,x1); 00095 } 00096 00099 template <class T> 00100 inline Vec2<T>::Vec2(const Vec<T,2>& v) : Vec<T,2>(v) {} 00101 00102 // Casting Operation 00103 00106 template <class T> template <class U> 00107 inline Vec2<T>::Vec2(const Vec<U,2>& v) : Vec<T,2>(v) {} 00108 00109 // Mutators 00110 00113 template <class T> 00114 inline void Vec2<T>::set(const T x0, const T x1) { 00115 x[0] = x0; x[1] = x1; 00116 } 00117 00120 template <class T> 00121 inline Vec2<T> Vec2<T>::perp() const { 00122 return Vec2<T>(-x[1],x[0]); 00123 } 00124 00125 //============================================================================== 00126 } // NAMESPACE rtc 00127 //============================================================================== 00128 #endif // RTC_VEC2_H defined 00129 //==============================================================================