#include "voro++.hh"
using namespace voro;
const double dis=1.25,mjrad=2.5,mirad=0.95,trad=mjrad+mirad;
const int particles=100000;
double rnd() {return double(rand())/RAND_MAX;}
int main() {
int i;
double x,y,z,r;
voronoicell c;
container con(-5,5,-5,5,-5,5,26,26,26,false,false,false,8);
particle_order po;
for(i=0;i<particles;i++) {
x=10*rnd()-5;
y=10*rnd()-5;
z=10*rnd()-5;
r=sqrt((x-dis)*(x-dis)+y*y);
if((r-mjrad)*(r-mjrad)+z*z<mirad) con.put(po,i,x,y,z);
else con.put(i,x,y,z);
}
FILE *f1=safe_fopen("loops1_m.pov","w");
FILE *f2=safe_fopen("loops1_v.pov","w");
c_loop_order clo(con,po);
if(clo.start()) do if(con.compute_cell(c,clo)) {
clo.pos(x,y,z);
c.draw_pov_mesh(x,y,z,f1);
c.draw_pov(x,y,z,f2);
} while (clo.inc());
fclose(f1);
fclose(f2);
f1=safe_fopen("loops2_m.pov","w");
f2=safe_fopen("loops2_v.pov","w");
c_loop_subset cls(con);
cls.setup_box(-dis-trad,-dis+trad,-mirad,mirad,-trad,trad,false);
if(cls.start()) do {
cls.pos(x,y,z);
r=sqrt((x+dis)*(x+dis)+z*z);
if((r-mjrad)*(r-mjrad)+y*y<mirad&&con.compute_cell(c,cls)) {
c.draw_pov_mesh(x,y,z,f1);
c.draw_pov(x,y,z,f2);
}
} while (cls.inc());
fclose(f1);
fclose(f2);
}