00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VECTOR_H
00018 #define VECTOR_H
00019
00020 #include <camvox/Interval.h>
00021
00022 namespace camvox {
00023
00037 template <class T>
00038 class TVector {
00039 public:
00040 T x;
00041 T y;
00042 T z;
00043 T w;
00044
00047 TVector(void) : x(0.0), y(0.0), z(0.0), w(0.0) {}
00048
00054 TVector(T _x, T _y, T _z) : x(_x), y(_y), z(_z), w(0.0) {}
00055
00062 TVector(T _x, T _y, T _z, T _w) : x(_x), y(_y), z(_z), w(_w) {}
00063
00067 TVector operator-() const {
00068 return TVector(-x, -y, -z, w);
00069 }
00070
00074 T length() const {
00075 return gsqrt(gsquare(x) + gsquare(y) + gsquare(z));
00076 }
00077
00081 TVector normalize() const {
00082 T c = 1.0 / length();
00083 return TVector(x * c, y * c, z * c, w);
00084 }
00085 };
00086
00087 typedef TVector<double> Vector;
00088 typedef TVector<Interval> IntervalVector;
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102 }
00103
00104 #endif