00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00019
00028
00029
00030
00031 #ifndef POINT3D_H
00032 #define POINT3D_H
00033
00035 #include <cmath>
00036
00037
00039 template<class T> class Point3D
00040 {
00041 public:
00042 Point3D();
00043 Point3D(const T x, const T y, const T z);
00044 Point3D(const Point3D& p);
00045 ~Point3D();
00046
00048 T x() const;
00049 T y() const;
00050 T z() const;
00051 unsigned int id() const;
00052 bool operator==(const Point3D<double>& p) const
00054 {
00055 if(xCoord == p.xCoord && yCoord == p.yCoord && zCoord == p.zCoord)
00056 return true;
00057 return fabs(xCoord - p.xCoord) < TOLERANCE && fabs(yCoord - p.yCoord) < TOLERANCE && fabs(zCoord - p.zCoord) < TOLERANCE;
00058 }
00059 bool operator==(const Point3D<float>& p) const
00061 {
00062 if(xCoord == p.xCoord && yCoord == p.yCoord && zCoord == p.zCoord)
00063 return true;
00064 return fabs(xCoord - p.xCoord) < TOLERANCE && fabs(yCoord - p.yCoord) < TOLERANCE && fabs(zCoord - p.zCoord) < TOLERANCE;
00065 }
00066 bool operator==(const Point3D<unsigned int>& p) const
00068 {
00069 return xCoord == p.xCoord && yCoord == p.yCoord && zCoord == p.zCoord;
00070 }
00071
00073 void setValues(const T x, const T y, const T z);
00074 void setCartesian(const T x, const T y, const T z);
00075 void setPolar(const T theta, const T phi, const T r);
00076 void setID(const unsigned int id);
00077 void add(const Point3D& p);
00078
00080 static const T PI;
00081 static const T DEGTORAD;
00082 static const T RADTODEG;
00083 static const T TOLERANCE;
00084
00085 private:
00087 T xCoord, yCoord, zCoord;
00088 unsigned int ID;
00089
00090 };
00091
00095
00097 template <class T> Point3D<T>::Point3D()
00099 {
00100 setValues(0, 0, 0);
00101 }
00102
00104 template <class T> Point3D<T>::Point3D(const T x, const T y, const T z)
00106 {
00107 setValues(x, y, z);
00108 }
00109
00111 template <class T> Point3D<T>::Point3D(const Point3D& p)
00113 {
00114 xCoord = p.xCoord;
00115 yCoord = p.yCoord;
00116 zCoord = p.zCoord;
00117 ID = p.ID;
00118 }
00119
00121 template <class T> Point3D<T>::~Point3D()
00123 {
00124
00125 }
00126
00128 template <class T> T Point3D<T>::x() const
00130 {
00131 return xCoord;
00132 }
00133
00135 template <class T> T Point3D<T>::y() const
00137 {
00138 return yCoord;
00139 }
00140
00142 template <class T> T Point3D<T>::z() const
00144 {
00145 return zCoord;
00146 }
00147
00149 template <class T> unsigned int Point3D<T>::id() const
00151 {
00152 return ID;
00153 }
00154
00156 template <class T> void Point3D<T>::setValues(const T x, const T y, const T z)
00158 {
00159 xCoord = x;
00160 yCoord = y;
00161 zCoord = z;
00162 }
00163
00165 template <class T> void Point3D<T>::setCartesian(const T x, const T y, const T z)
00167 {
00168 setValues(x, y, z);
00169 }
00170
00172 template <class T> void Point3D<T>::setPolar(const T theta, const T phi, const T r)
00175 {
00176 setValues(r*sin(theta*DEGTORAD)*cos(phi*DEGTORAD), r*sin(theta*DEGTORAD)*sin(phi*DEGTORAD), r*cos(theta*DEGTORAD));
00177 }
00178
00180 template <class T> void Point3D<T>::setID(const unsigned int id)
00182 {
00183 ID = id;
00184 }
00185
00187 template <class T> void Point3D<T>::add(const Point3D& p)
00189 {
00190 xCoord += p.xCoord;
00191 yCoord += p.yCoord;
00192 zCoord += p.zCoord;
00193 }
00194
00195 #endif
00196