MC_v3d_vector.hpp
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
00020 #ifndef MC_V3D_VECTOR_HPP_
00021 #define MC_V3D_VECTOR_HPP_
00022
00023
00024
00025 #include <MC_v3d.hpp>
00026 #include <vector>
00027 #include <set>
00028 #include <map>
00029 #include <list>
00030 #include <algorithm>
00031
00032
00033
00034 namespace mesh_conv
00035 {
00036 class MC_double_vector;
00037 class MC_int_vector;
00038 class MC_matrix;
00039 class MC_connectivity_index;
00040 class MC_mesh_index_vector;
00041
00043
00044 class MC_v3d_vector
00045 {
00046
00047
00048 protected:
00049
00051 std::vector <MC_v3d> v;
00052
00053
00054 public:
00055
00056
00057
00058
00059
00060
00061
00062
00064 MC_v3d_vector();
00066 MC_v3d_vector(const int& new_size);
00068 MC_v3d_vector(const MC_v3d& v0);
00070 MC_v3d_vector(const MC_v3d& v0,const MC_v3d& v1);
00072 MC_v3d_vector(const MC_v3d& v0,const MC_v3d& v1,const MC_v3d& v2);
00074 MC_v3d_vector(const MC_v3d& v0,const MC_v3d& v1,const MC_v3d& v2,const MC_v3d& v3);
00076 MC_v3d_vector(const MC_v3d& v0,const MC_v3d& v1,const MC_v3d& v2,const MC_v3d& v3,const MC_v3d& v4);
00078 MC_v3d_vector(const MC_v3d_vector& vec);
00080 MC_v3d_vector(const std::vector <MC_v3d>& vec);
00082 MC_v3d_vector(const std::set <MC_v3d,MC_v3d_less> set);
00084 MC_v3d_vector(const std::map <MC_v3d,int,MC_v3d_less> map);
00086 MC_v3d_vector(const MC_double_vector& x_vector,const MC_double_vector& y_vector,const MC_double_vector& z_vector);
00087
00088
00089
00090
00091
00092
00093
00097 void assert_bounds(const int& u) const;
00098
00099
00100
00101
00102
00103
00104
00105
00106
00108 int size() const;
00109
00110
00111
00112
00113
00114
00115
00117 void clear();
00118
00122 MC_v3d_vector& resize(const int& new_size);
00123
00127 MC_v3d_vector& add(const MC_v3d& x);
00131 MC_v3d_vector& add(const MC_v3d_vector& v_x);
00135 friend MC_v3d_vector operator<<(const MC_v3d_vector& vec,const MC_v3d& value);
00139 friend MC_v3d_vector operator<<(const MC_v3d_vector& vec,const MC_v3d_vector& value);
00140
00141
00145 MC_v3d_vector& set(const int& k_index,const MC_v3d& x);
00151 MC_v3d_vector& set(const mesh_conv::MC_int_vector& k_index,const MC_v3d_vector& x);
00152
00153
00155 const MC_v3d& first() const;
00157 MC_v3d& first();
00158
00160 const MC_v3d& last() const;
00162 MC_v3d& last();
00163
00165 MC_double_vector component(const int& k_dim) const;
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00177 static MC_v3d_vector zeros(const int& new_size);
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00192 MC_v3d_vector operator-() const;
00193
00194
00198 friend MC_v3d_vector operator+(const MC_v3d_vector& vec,const MC_v3d& to_add);
00202 friend MC_v3d_vector operator+(const MC_v3d& to_add,const MC_v3d_vector& vec);
00206 friend MC_v3d_vector operator-(const MC_v3d_vector& vec,const MC_v3d& to_sub);
00207
00211 friend MC_v3d_vector operator*(const MC_v3d_vector& vec,const double& to_mult);
00215 friend MC_v3d_vector operator*(const double& to_mult,const MC_v3d_vector& vec);
00219 friend MC_v3d_vector operator/(const MC_v3d_vector& vec,const double& to_subdiv);
00220
00221
00222
00228 friend MC_v3d_vector operator+(const MC_v3d_vector& vec,const MC_v3d_vector& to_add);
00234 friend MC_v3d_vector operator-(const MC_v3d_vector& vec,const MC_v3d_vector& to_sub);
00235
00236
00237
00239 MC_v3d_vector& operator+=(const MC_v3d& to_add);
00241 MC_v3d_vector& operator-=(const MC_v3d& to_sub);
00243 MC_v3d_vector& operator*=(const double& to_mult);
00245 MC_v3d_vector& operator/=(const double& to_subdiv);
00246
00251 MC_v3d_vector& operator+=(const MC_v3d_vector& to_add);
00256 MC_v3d_vector& operator-=(const MC_v3d_vector& to_sub);
00257
00259 static MC_v3d sum(const MC_v3d_vector& vec);
00260
00262 friend MC_v3d_vector operator*(const MC_matrix& M,const MC_v3d_vector& vec);
00264 MC_v3d_vector& operator*=(const MC_matrix& M);
00265
00268 friend MC_v3d_vector operator*(const MC_double_vector w,const MC_v3d_vector& vec);
00271 friend MC_v3d_vector operator*(const MC_v3d_vector& vec,const MC_double_vector& w);
00274 MC_v3d_vector& operator*=(const MC_double_vector& w);
00275
00277 static MC_double_vector norm(const MC_v3d_vector& vec);
00278
00280 MC_v3d_vector normalized() const;
00281
00283 MC_v3d_vector& scale(const MC_v3d_vector& s);
00284
00288 std::pair <MC_v3d_vector,double> scaled_to_unit() const;
00289
00291 MC_v3d barycenter() const;
00292
00293
00294
00295
00296
00297
00298
00299
00301 const MC_v3d& operator()(const int& k_index) const ;
00303 MC_v3d& operator()(const int& k_index) ;
00305 const MC_v3d& operator[](const int& k_index) const ;
00307 MC_v3d& operator[](const int& k_index) ;
00308
00310 MC_v3d_vector operator()(const MC_int_vector& index) const;
00312 MC_v3d_vector operator[](const MC_int_vector& index) const;
00313
00315 const MC_v3d* pointer() const;
00319 MC_v3d* pointer_unprotected();
00320
00321
00322
00323
00324
00325
00326
00328 std::map <MC_v3d,int,MC_v3d_less> to_map() const;
00330 std::set <MC_v3d,MC_v3d_less> to_set() const;
00332 std::list <MC_v3d> to_list() const;
00333
00334
00335
00336
00337
00338
00339
00340
00345 std::pair <MC_v3d,MC_v3d> bounding_box_elements() const;
00346
00348 MC_v3d bounding_box_length() const;
00349
00350
00351
00352
00353
00354
00355
00356
00358 friend std::ostream& operator<<(std::ostream& output,const MC_v3d_vector& in);
00359
00361 std::ostream& export_stream(std::ostream& output) const;
00363 MC_v3d_vector& read_stream(std::istream& input);
00364
00365 private:
00366 };
00367
00368
00370 class MC_v3d_vector_less
00371 {
00372 public:
00373 bool operator()(const MC_v3d_vector& v0,const MC_v3d_vector& v1) const
00374 {
00375 MC_v3d_less L;
00376 if(v0.size()<v1.size())
00377 return true;
00378 else if(v0.size()>v1.size())
00379 return false;
00380 else
00381 {
00382 int N=v0.size();
00383 for(int k=0;k<N;++k)
00384 {
00385 if(L(v0[k],v1[k])==true)
00386 return true;
00387 else if(L(v1[k],v0[k])==true)
00388 return false;
00389 }
00390
00391 return false;
00392 }
00393 }
00394 };
00395
00396 }
00397
00398 #endif