10 #ifndef VOROPP_CELL_HH 
   11 #define VOROPP_CELL_HH 
   88                 void init_base(
double xmin,
double xmax,
double ymin,
double ymax,
double zmin,
double zmax);
 
   90                 void init_tetrahedron_base(
double x0,
double y0,
double z0,
double x1,
double y1,
double z1,
double x2,
double y2,
double z2,
double x3,
double y3,
double z3);
 
   91                 void translate(
double x,
double y,
double z);
 
   92                 void draw_pov(
double x,
double y,
double z,FILE *fp=stdout);
 
   98                 inline void draw_pov(
double x,
double y,
double z,
const char *filename) {
 
   99                         FILE *fp=safe_fopen(filename,
"w");
 
  103                 void draw_pov_mesh(
double x,
double y,
double z,FILE *fp=stdout);
 
  109                 inline void draw_pov_mesh(
double x,
double y,
double z,
const char *filename) {
 
  110                         FILE *fp=safe_fopen(filename,
"w");
 
  114                 void draw_gnuplot(
double x,
double y,
double z,FILE *fp=stdout);
 
  119                 inline void draw_gnuplot(
double x,
double y,
double z,
const char *filename) {
 
  120                         FILE *fp=safe_fopen(filename,
"w");
 
  128                 void centroid(
double &cx,
double &cy,
double &cz);
 
  133                 void vertices(std::vector<double> &v);
 
  135                 void vertices(
double x,
double y,
double z,std::vector<double> &v);
 
  142                         voro_print_vector(v,fp);
 
  149                         voro_print_vector(v,fp);
 
  155                         voro_print_vector(v,fp);
 
  161                         voro_print_face_vertices(v,fp);
 
  168                         voro_print_vector(v,fp);
 
  170                 void normals(std::vector<double> &v);
 
  174                         std::vector<double> v;
normals(v);
 
  175                         voro_print_positions(v,fp);
 
  183                 void output_custom(
const char *format,
int i,
double x,
double y,
double z,
double r,FILE *fp=stdout);
 
  184                 template<
class vc_
class>
 
  185                 bool nplane(vc_class &vc,
double x,
double y,
double z,
double rsq,
int p_id);
 
  197                 virtual void neighbors(std::vector<int> &v) {v.clear();}
 
  239                 template<
class vc_
class>
 
  252                 int current_marginal;
 
  267                 template<
class vc_
class>
 
  268                 void add_memory(vc_class &vc,
int i,
int *stackp2);
 
  269                 template<
class vc_
class>
 
  270                 void add_memory_vertices(vc_class &vc);
 
  271                 template<
class vc_
class>
 
  272                 void add_memory_vorder(vc_class &vc);
 
  273                 void add_memory_ds(
int *&stackp);
 
  274                 void add_memory_ds2(
int *&stackp2);
 
  275                 template<
class vc_
class>
 
  276                 inline bool collapse_order1(vc_class &vc);
 
  277                 template<
class vc_
class>
 
  278                 inline bool collapse_order2(vc_class &vc);
 
  279                 template<
class vc_
class>
 
  280                 inline bool delete_connection(vc_class &vc,
int j,
int k,
bool hand);
 
  281                 template<
class vc_
class>
 
  282                 inline bool search_for_outside_edge(vc_class &vc,
int &
up);
 
  283                 template<
class vc_
class>
 
  284                 inline void add_to_stack(vc_class &vc,
int lp,
int *&stackp2);
 
  285                 inline bool plane_intersects_track(
double x,
double y,
double z,
double rs,
double g);
 
  286                 inline void normals_search(std::vector<double> &v,
int i,
int j,
int k);
 
  287                 inline bool search_edge(
int l,
int &m,
int &k);
 
  288                 inline int m_test(
int n,
double &ans);
 
  289                 int check_marginal(
int n,
double &ans);
 
  318                 inline bool nplane(
double x,
double y,
double z,
double rsq,
int p_id) {
 
  319                         return nplane(*
this,x,y,z,rsq,0);
 
  328                 inline bool nplane(
double x,
double y,
double z,
int p_id) {
 
  329                         double rsq=x*x+y*y+z*z;
 
  330                         return nplane(*
this,x,y,z,rsq,0);
 
  338                 inline bool plane(
double x,
double y,
double z,
double rsq) {
 
  339                         return nplane(*
this,x,y,z,rsq,0);
 
  346                 inline bool plane(
double x,
double y,
double z) {
 
  347                         double rsq=x*x+y*y+z*z;
 
  348                         return nplane(*
this,x,y,z,rsq,0);
 
  355                 inline void init(
double xmin,
double xmax,
double ymin,
double ymax,
double zmin,
double zmax) {
 
  356                         init_base(xmin,xmax,ymin,ymax,zmin,zmax);
 
  371                 inline void init_tetrahedron(
double x0,
double y0,
double z0,
double x1,
double y1,
double z1,
double x2,
double y2,
double z2,
double x3,
double y3,
double z3) {
 
  372                         init_tetrahedron_base(x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3);
 
  375                 inline void n_allocate(
int i,
int m) {};
 
  376                 inline void n_add_memory_vertices(
int i) {};
 
  377                 inline void n_add_memory_vorder(
int i) {};
 
  378                 inline void n_set_pointer(
int p,
int n) {};
 
  379                 inline void n_copy(
int a,
int b,
int c,
int d) {};
 
  380                 inline void n_set(
int a,
int b,
int c) {};
 
  381                 inline void n_set_aux1(
int k) {};
 
  382                 inline void n_copy_aux1(
int a,
int b) {};
 
  383                 inline void n_copy_aux1_shift(
int a,
int b) {};
 
  384                 inline void n_set_aux2_copy(
int a,
int b) {};
 
  385                 inline void n_copy_pointer(
int a,
int b) {};
 
  386                 inline void n_set_to_aux1(
int j) {};
 
  387                 inline void n_set_to_aux2(
int j) {};
 
  388                 inline void n_allocate_aux1(
int i) {};
 
  389                 inline void n_switch_to_aux1(
int i) {};
 
  390                 inline void n_copy_to_aux1(
int i,
int m) {};
 
  391                 inline void n_set_to_aux1_offset(
int k,
int m) {};
 
  392                 inline void n_neighbors(std::vector<int> &v) {v.clear();};
 
  430                 inline bool nplane(
double x,
double y,
double z,
double rsq,
int p_id) {
 
  431                         return nplane(*
this,x,y,z,rsq,p_id);
 
  440                 inline bool nplane(
double x,
double y,
double z,
int p_id) {
 
  441                         double rsq=x*x+y*y+z*z;
 
  442                         return nplane(*
this,x,y,z,rsq,p_id);
 
  451                 inline bool plane(
double x,
double y,
double z,
double rsq) {
 
  452                         return nplane(*
this,x,y,z,rsq,0);
 
  462                 inline bool plane(
double x,
double y,
double z) {
 
  463                         double rsq=x*x+y*y+z*z;
 
  464                         return nplane(*
this,x,y,z,rsq,0);
 
  466                 void init(
double xmin,
double xmax,
double ymin,
double ymax,
double zmin,
double zmax);
 
  468                 void init_tetrahedron(
double x0,
double y0,
double z0,
double x1,
double y1,
double z1,
double x2,
double y2,
double z2,
double x3,
double y3,
double z3);
 
  470                 virtual void neighbors(std::vector<int> &v);
 
  474                         voro_print_vector(v,fp);
 
  479                 inline void n_allocate(
int i,
int m) {
mne[i]=
new int[m*i];}
 
  480                 inline void n_add_memory_vertices(
int i) {
 
  481                         int **pp=
new int*[i];
 
  485                 inline void n_add_memory_vorder(
int i) {
 
  486                         int **p2=
new int*[i];
 
  490                 inline void n_set_pointer(
int p,
int n) {
 
  493                 inline void n_copy(
int a,
int b,
int c,
int d) {
ne[a][b]=
ne[c][d];}
 
  494                 inline void n_set(
int a,
int b,
int c) {
ne[a][b]=c;}
 
  495                 inline void n_set_aux1(
int k) {paux1=
mne[k]+k*
mec[k];}
 
  496                 inline void n_copy_aux1(
int a,
int b) {paux1[b]=
ne[a][b];}
 
  497                 inline void n_copy_aux1_shift(
int a,
int b) {paux1[b]=
ne[a][b+1];}
 
  498                 inline void n_set_aux2_copy(
int a,
int b) {
 
  500                         for(
int i=0;i<b;i++) 
ne[a][i]=paux2[i];
 
  502                 inline void n_copy_pointer(
int a,
int b) {
ne[a]=
ne[b];}
 
  503                 inline void n_set_to_aux1(
int j) {
ne[j]=paux1;}
 
  504                 inline void n_set_to_aux2(
int j) {
ne[j]=paux2;}
 
  505                 inline void n_allocate_aux1(
int i) {paux1=
new int[i*
mem[i]];}
 
  506                 inline void n_switch_to_aux1(
int i) {
delete [] 
mne[i];
mne[i]=paux1;}
 
  507                 inline void n_copy_to_aux1(
int i,
int m) {paux1[m]=
mne[i][m];}
 
  508                 inline void n_set_to_aux1_offset(
int k,
int m) {
ne[k]=paux1+m;}
 
void init_tetrahedron(double x0, double y0, double z0, double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3)
void init_tetrahedron(double x0, double y0, double z0, double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3)
void output_vertex_orders(FILE *fp=stdout)
bool nplane(double x, double y, double z, int p_id)
Extension of the voronoicell_base class to represent a Voronoi cell with neighbor information...
int cycle_down(int a, int p)
void centroid(double &cx, double &cy, double &cz)
bool plane_intersects(double x, double y, double z, double rsq)
void face_areas(std::vector< double > &v)
void init_tetrahedron_base(double x0, double y0, double z0, double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3)
void operator=(voronoicell &c)
void draw_gnuplot(double x, double y, double z, FILE *fp=stdout)
virtual void neighbors(std::vector< int > &v)
bool nplane(double x, double y, double z, int p_id)
bool plane(double x, double y, double z)
bool plane(double x, double y, double z, double rsq)
void init_octahedron(double l)
void construct_relations()
void init(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax)
void output_face_areas(FILE *fp=stdout)
virtual void print_edges_neighbors(int i)
void output_face_freq_table(FILE *fp=stdout)
Master configuration file for setting various compile-time options. 
void draw_pov_mesh(double x, double y, double z, const char *filename)
virtual void output_neighbors(FILE *fp=stdout)
bool nplane(vc_class &vc, double x, double y, double z, double rsq, int p_id)
void init_octahedron(double l)
virtual void neighbors(std::vector< int > &v)
void check_memory_for_copy(vc_class &vc, voronoicell_base *vb)
void vertices(std::vector< double > &v)
bool plane(double x, double y, double z, double rsq)
void face_perimeters(std::vector< double > &v)
virtual void print_edges_neighbors(int i)
virtual void output_neighbors(FILE *fp=stdout)
void output_vertices(FILE *fp=stdout)
bool plane(double x, double y, double z)
void operator=(voronoicell &c)
bool nplane(double x, double y, double z, double rsq, int p_id)
void draw_pov(double x, double y, double z, FILE *fp=stdout)
double max_radius_squared()
void output_face_orders(FILE *fp=stdout)
bool nplane(double x, double y, double z, double rsq, int p_id)
void face_orders(std::vector< int > &v)
int cycle_up(int a, int p)
void output_face_perimeters(FILE *fp=stdout)
void draw_gnuplot(double x, double y, double z, const char *filename)
void face_vertices(std::vector< int > &v)
void init_octahedron_base(double l)
bool plane_intersects_guess(double x, double y, double z, double rsq)
Header file for the small helper functions. 
double total_edge_distance()
void copy(voronoicell_base *vb)
void face_freq_table(std::vector< int > &v)
void output_custom(const char *format, FILE *fp=stdout)
A class representing a single Voronoi cell. 
Extension of the voronoicell_base class to represent a Voronoi cell without neighbor information...
void draw_pov_mesh(double x, double y, double z, FILE *fp=stdout)
void init_base(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax)
void output_face_vertices(FILE *fp=stdout)
void vertex_orders(std::vector< int > &v)
void output_normals(FILE *fp=stdout)
void translate(double x, double y, double z)
void normals(std::vector< double > &v)
void draw_pov(double x, double y, double z, const char *filename)
void init(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax)