00001
00002
00003
00004
00005
00006
00007 #ifndef VOROPP_WALL_HH
00008 #define VOROPP_WALL_HH
00009
00010
00011
00012
00013 struct wall_sphere : public wall {
00014 public:
00015
00016
00017
00018
00019
00020
00021 wall_sphere(fpoint ixc,fpoint iyc,fpoint izc,fpoint irc,int iw_id=-99)
00022 : w_id(iw_id), xc(ixc), yc(iyc), zc(izc), rc(irc) {};
00023 bool point_inside(fpoint x,fpoint y,fpoint z);
00024 template<class n_option>
00025 inline bool cut_cell_base(voronoicell_base<n_option> &c,fpoint x,fpoint y,fpoint z);
00026 bool cut_cell(voronoicell_base<neighbor_none> &c,fpoint x,fpoint y,fpoint z) {return cut_cell_base(c,x,y,z);}
00027 bool cut_cell(voronoicell_base<neighbor_track> &c,fpoint x,fpoint y,fpoint z) {return cut_cell_base(c,x,y,z);}
00028 private:
00029 const int w_id;
00030 const fpoint xc,yc,zc,rc;
00031 };
00032
00033
00034
00035
00036 struct wall_plane : public wall {
00037 public:
00038
00039
00040
00041
00042
00043 wall_plane(fpoint ixc,fpoint iyc,fpoint izc,fpoint iac,int iw_id=-99)
00044 : w_id(iw_id), xc(ixc), yc(iyc), zc(izc), ac(iac) {};
00045 bool point_inside(fpoint x,fpoint y,fpoint z);
00046 template<class n_option>
00047 inline bool cut_cell_base(voronoicell_base<n_option> &c,fpoint x,fpoint y,fpoint z);
00048 bool cut_cell(voronoicell_base<neighbor_none> &c,fpoint x,fpoint y,fpoint z) {return cut_cell_base(c,x,y,z);}
00049 bool cut_cell(voronoicell_base<neighbor_track> &c,fpoint x,fpoint y,fpoint z) {return cut_cell_base(c,x,y,z);}
00050 private:
00051 const int w_id;
00052 const fpoint xc,yc,zc,ac;
00053 };
00054
00055
00056
00057
00058 struct wall_cylinder : public wall {
00059 public:
00060
00061
00062
00063
00064
00065
00066
00067
00068 wall_cylinder(fpoint ixc,fpoint iyc,fpoint izc,fpoint ixa,fpoint iya,fpoint iza,fpoint irc,int iw_id=-99)
00069 : w_id(iw_id), xc(ixc), yc(iyc), zc(izc), xa(ixa), ya(iya), za(iza),
00070 asi(1/(ixa*ixa+iya*iya+iza*iza)), rc(irc) {};
00071 bool point_inside(fpoint x,fpoint y,fpoint z);
00072 template<class n_option>
00073 inline bool cut_cell_base(voronoicell_base<n_option> &c,fpoint x,fpoint y,fpoint z);
00074 bool cut_cell(voronoicell_base<neighbor_none> &c,fpoint x,fpoint y,fpoint z) {return cut_cell_base(c,x,y,z);}
00075 bool cut_cell(voronoicell_base<neighbor_track> &c,fpoint x,fpoint y,fpoint z) {return cut_cell_base(c,x,y,z);}
00076 private:
00077 const int w_id;
00078 const fpoint xc,yc,zc,xa,ya,za,asi,rc;
00079 };
00080
00081
00082
00083
00084
00085 struct wall_cone : public wall {
00086 public:
00087
00088
00089
00090
00091
00092
00093
00094
00095 wall_cone(fpoint ixc,fpoint iyc,fpoint izc,fpoint ixa,fpoint iya,fpoint iza,fpoint ang,int iw_id=-99)
00096 : w_id(iw_id), xc(ixc), yc(iyc), zc(izc), xa(ixa), ya(iya), za(iza),
00097 asi(1/(ixa*ixa+iya*iya+iza*iza)),
00098 gra(tan(ang)), sang(sin(ang)), cang(cos(ang)) {};
00099 bool point_inside(fpoint x,fpoint y,fpoint z);
00100 template<class n_option>
00101 inline bool cut_cell_base(voronoicell_base<n_option> &c,fpoint x,fpoint y,fpoint z);
00102 bool cut_cell(voronoicell_base<neighbor_none> &c,fpoint x,fpoint y,fpoint z) {return cut_cell_base(c,x,y,z);}
00103 bool cut_cell(voronoicell_base<neighbor_track> &c,fpoint x,fpoint y,fpoint z) {return cut_cell_base(c,x,y,z);}
00104 private:
00105 const int w_id;
00106 const fpoint xc,yc,zc,xa,ya,za,asi,gra,sang,cang;
00107 };
00108
00109 #endif