00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef VERTEX_HPP
00023 #define VERTEX_HPP
00024
00025 #include <TinyVector.hpp>
00026 #include <StreamCenter.hpp>
00027
00037 class Vertex
00038 : public TinyVector<3, real_t>
00039 {
00040 private:
00041 size_t __reference;
00043 public:
00052 inline bool operator == (const Vertex& V) const
00053 {
00054 return (&V == this);
00055 }
00056
00064 inline const Vertex& operator = (const Vertex& V)
00065 {
00066 TinyVector<3, real_t>::operator = (V);
00067 __reference = V.__reference;
00068 return (*this);
00069 }
00070
00077 inline real_t& x()
00078 {
00079 return (*this)[0];
00080 }
00081
00088 inline real_t& y()
00089 {
00090 return (*this)[1];
00091 }
00092
00093
00100 inline real_t& z()
00101 {
00102 return (*this)[2];
00103 }
00104
00111 inline const real_t& x() const
00112 {
00113 return (*this)[0];
00114 }
00115
00122 inline const real_t& y() const
00123 {
00124 return (*this)[1];
00125 }
00126
00133 inline const real_t& z() const
00134 {
00135 return (*this)[2];
00136 }
00137
00144 inline size_t& reference()
00145 {
00146 return __reference;
00147 }
00148
00155 inline const size_t& reference() const
00156 {
00157 return __reference;
00158 }
00159
00164 Vertex()
00165 : TinyVector<3, real_t>(0,0,0),
00166 __reference(0)
00167 {
00168 ;
00169 }
00170
00181 Vertex(const real_t& x,
00182 const real_t& y,
00183 const real_t& z,
00184 const size_t& reference = 0)
00185 : TinyVector<3, real_t>(x,y,z),
00186 __reference(reference)
00187 {
00188 ;
00189 }
00190
00199 Vertex(const TinyVector<3, real_t>& v,
00200 const size_t& reference=0)
00201 : TinyVector<3, real_t>(v),
00202 __reference(reference)
00203 {
00204 ;
00205 }
00206
00213 Vertex(const Vertex& v)
00214 : TinyVector<3, real_t>(v),
00215 __reference(v.__reference)
00216 {
00217 ;
00218 }
00219
00224 ~Vertex()
00225 {
00226 ;
00227 }
00228
00236 inline real_t distance(const TinyVector<3, real_t>& V) const
00237 {
00238 return std::sqrt((V[0]-x())*(V[0]-x())
00239 +(V[1]-y())*(V[1]-y())
00240 +(V[2]-z())*(V[2]-z()));
00241 }
00242
00250 inline real_t distance2(const TinyVector<3, real_t>& V) const
00251 {
00252 return ((V[0]-x())*(V[0]-x())
00253 +(V[1]-y())*(V[1]-y())
00254 +(V[2]-z())*(V[2]-z()));
00255 }
00256
00257
00266 friend std::ostream& operator<< (std::ostream& os,
00267 const Vertex& V);
00268 };
00269
00270
00271 #endif // VERTEX_HPP
00272
00273
00274
00275
00276