Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef RTC_VEC3_H
00020 #define RTC_VEC3_H
00021
00022
00023 #include "rtc/rtcMath.h"
00024 #include "rtc/rtcVec.h"
00025
00026
00027 namespace rtc {
00028
00029
00030 template <class T, int M> class Vec;
00031 template <class T> class Vec3;
00032 template <class T> class SMat3;
00033
00037 template <class T>
00038 class Vec3: public Vec<T,3> {
00039 public:
00040
00041 Vec3();
00042 Vec3(const T* d);
00043 Vec3(const T a);
00044 Vec3(const T x0, const T x1, const T x2);
00045 Vec3(const Vec<T,3>& v);
00046
00047
00048 template <class U> Vec3(const Vec<U,3>& v);
00049
00050
00051 void set(const T x0, const T x1, const T x2);
00052
00053
00054 Vec3<T> cross(const Vec3<T>& v) const;
00055
00056
00057 inline Vec3<T> operator%(const Vec3<T>& v) const;
00058
00059
00060 using Vec<T,3>::x;
00061 using Vec<T,3>::set;
00062 };
00063
00064
00065 typedef Vec3<bool> Vec3b;
00066 typedef Vec3<signed char> Vec3c;
00067 typedef Vec3<unsigned char> Vec3uc;
00068 typedef Vec3<signed short int> Vec3s;
00069 typedef Vec3<unsigned short int> Vec3us;
00070 typedef Vec3<int> Vec3i;
00071 typedef Vec3<unsigned int> Vec3ui;
00072 typedef Vec3<float> Vec3f;
00073 typedef Vec3<double> Vec3d;
00074
00075
00076
00077
00078
00079
00080
00083 template <class T>
00084 inline Vec3<T>::Vec3() {}
00085
00088 template <class T>
00089 inline Vec3<T>::Vec3(const T* d) : Vec<T,3>(d) {}
00090
00093 template <class T>
00094 inline Vec3<T>::Vec3(const T a) : Vec<T,3>(a) {}
00095
00098 template <class T>
00099 inline Vec3<T>::Vec3(const T x0, const T x1, const T x2) {
00100 set(x0,x1,x2);
00101 }
00102
00105 template <class T>
00106 inline Vec3<T>::Vec3(const Vec<T,3>& v) : Vec<T,3>(v){}
00107
00108
00109
00112 template <class T> template <class U>
00113 inline Vec3<T>::Vec3(const Vec<U,3>& v) : Vec<T,3>(v) {}
00114
00115
00116
00117
00120 template <class T>
00121 inline void Vec3<T>::set(const T x0, const T x1, const T x2) {
00122 x[0] = x0; x[1] = x1; x[2] = x2;
00123 }
00124
00125
00126
00131 template <class T>
00132 inline Vec3<T> Vec3<T>::cross(const Vec3<T>& v) const {
00133 return Vec3<T>(x[1]*v.x[2]-x[2]*v.x[1],
00134 x[2]*v.x[0]-x[0]*v.x[2],
00135 x[0]*v.x[1]-x[1]*v.x[0]);
00136 }
00137
00140 template <class T>
00141 inline Vec3<T> Vec3<T>::operator%(const Vec3<T>& v) const {
00142 return cross(v);
00143 }
00144
00145
00146 }
00147
00148 #endif // RTC_VEC3_H defined
00149