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)