#include "voro++.hh"
using namespace voro;
const int particles=20;
double rnd() {return double(rand())/RAND_MAX;}
class wall_l_shape : public wall {
public:
wall_l_shape() {
v.init_l_shape();
v.draw_gnuplot(0,0,0,"l_shape_init.gnu");
};
bool point_inside(double x,double y,double z) {return true;}
bool cut_cell(voronoicell &c,double x,double y,double z) {
c=v;
c.translate(-x,-y,-z);
c.big_tol=100;
return true;
}
bool cut_cell(voronoicell_neighbor &c,double x,double y,double z) {
c=v;
c.translate(-x,-y,-z);
c.big_tol=100;
return true;
}
private:
voronoicell v;
};
int main() {
int i=0;
double x,y,z;
container con(-1,1,-1,1,-1,1,5,5,5,false,false,false,8);
wall_l_shape(wls);
con.add_wall(wls);
while(i<particles) {
x=2*rnd()-1;
y=2*rnd()-1;
if(x<0&&y>0) continue;
z=2*rnd()-1;
con.put(i,x,y,z);
i++;
}
printf("Voronoi cell volume: %.8g\n",con.sum_cell_volumes());
con.draw_particles("l_shape_p.gnu");
con.draw_cells_gnuplot("l_shape_v.gnu");
}