Orbiter 2022
Combinatorial Objects
graphics.h
Go to the documentation of this file.
1// graphics.h
2//
3// Anton Betten
4//
5// moved here from galois.h: July 27, 2018
6// started as orbiter: October 23, 2002
7// 2nd version started: December 7, 2003
8// galois started: August 12, 2005
9
10
11#ifndef ORBITER_SRC_LIB_FOUNDATIONS_GRAPHICS_GRAPHICS_H_
12#define ORBITER_SRC_LIB_FOUNDATIONS_GRAPHICS_GRAPHICS_H_
13
14
15
16namespace orbiter {
17namespace layer1_foundations {
18namespace graphics {
19
20
21// #############################################################################
22// animate.cpp
23// #############################################################################
24
25
27
28
29class animate {
30public:
33 std::string output_mask;
34 char fname_makefile[1000];
37 std::ofstream *fpm;
38 void (*draw_frame_callback)(animate *A, int frame,
39 int nb_frames_this_round, int round,
40 double clipping,
41 std::ostream &fp,
42 int verbose_level);
45
46 animate();
47 ~animate();
48 void init(
50 void *extra_data,
51 int verbose_level);
53 int round,
54 int verbose_level);
55 void draw_single_line(int line_idx, std::string &color, std::ostream &fp);
56 void draw_single_quadric(int idx, std::string &color, std::ostream &fp);
57 void draw_single_surface(int surface_idx, std::ostream &fp);
58 void draw_single_surface_with_color(int surface_idx, std::string &color, std::ostream &fp);
59 void draw_Hilbert_point(int point_idx, double rad,
60 std::string &options, std::ostream &fp);
61 void draw_Hilbert_line(int line_idx, std::string &color, std::ostream &fp);
62 void draw_Hilbert_plane(int plane_idx, std::string &color, std::ostream &fp);
63 void draw_Hilbert_red_line(int idx_one_based, std::ostream &fp);
64 void draw_Hilbert_blue_line(int idx_one_based, std::ostream &fp);
65 void draw_Hilbert_red_lines(std::ostream &fp);
66 void draw_Hilbert_blue_lines(std::ostream &fp);
67 void draw_Hilbert_cube_extended_edges(std::ostream &fp);
68 void draw_Hilbert_cube_faces(std::ostream &fp);
69 void draw_Hilbert_cube_boxed(std::ostream &fp);
70 void draw_Hilbert_tetrahedron_boxed(std::ostream &fp);
71 void draw_Hilbert_tetrahedron_faces(std::ostream &fp);
73 int h, int nb_frames, int round,
74 double clipping_radius,
75 std::ostream &fp,
76 int verbose_level);
77 void draw_surface_13_1(std::ostream &fp);
79 int h, int nb_frames, int round,
80 std::ostream &fp,
81 int verbose_level);
82 // tritangent plane, 6 arc points, 2 blue lines, 6 red lines, text
84 int h, int nb_frames, int round,
85 double clipping_radius,
86 std::ostream &fp,
87 int verbose_level);
89 int h, int nb_frames, int round,
90 double clipping_radius,
91 std::ostream &fp,
92 int verbose_level);
94 int h, int nb_frames, int round,
95 double clipping_radius,
96 std::ostream &fp,
97 int verbose_level);
99 int h, int nb_frames, int round,
100 double clipping_radius,
101 std::ostream &fp,
102 int verbose_level);
104 int h, int nb_frames, int round,
105 double clipping_radius,
106 std::ostream &fp,
107 int verbose_level);
108 void draw_frame_windy(
109 int h, int nb_frames, int round,
110 double clipping_radius,
111 std::ostream &fp,
112 int verbose_level);
113 void rotation(
114 int h, int nb_frames, int round,
115 std::ostream &fp);
116 void union_end(
117 int h, int nb_frames, int round,
118 double clipping_radius,
119 std::ostream &fp);
120 void draw_text(std::string &text,
121 double thickness_half, double extra_spacing,
122 double scale,
123 double off_x, double off_y, double off_z,
124 std::string &color_options,
125 int idx_point,
126 //double x, double y, double z,
127 //double up_x, double up_y, double up_z,
128 //double view_x, double view_y, double view_z,
129 std::ostream &ost, int verbose_level);
130 void draw_text_with_selection(int *selection, int nb_select,
131 double thickness_half, double extra_spacing,
132 double scale,
133 double off_x, double off_y, double off_z,
134 std::string &options, std::string &group_options,
135 std::ostream &ost, int verbose_level);
136};
137
138
139// #############################################################################
140// draw_bitmap_control.cpp
141// #############################################################################
142
143
145
146
148
149public:
150
153
156
158 int *M;
159 int *M2;
160
161 int m;
162 int n;
165 std::string part_row;
166 std::string part_col;
167
168#if 0
169 int *Row_parts;
170 int nb_row_parts;
171 int *Col_parts;
172 int nb_col_parts;
173#endif
178
179
182 int read_arguments(
183 int argc, std::string *argv,
184 int verbose_level);
185 void print();
186};
187
188
189// #############################################################################
190// draw_incidence_structure_description.cpp
191// #############################################################################
192
193
195
196
198public:
200 int width;
201
204
205 // width for one box in 0.1mm
206 // width_10 is 1 10th of width
207 // example: width = 40, width_10 = 4 */
208
210
212 std::string unit_length;
213
215 std::string thick_lines;
216
218 std::string thin_lines;
219
221 std::string geo_line_width;
222
223 int v;
224 int b;
225 int V;
226 int B;
227 int *Vi;
228 int *Bj;
229
230#if 0
231 int *R;
232 int *X;
233 int dim_X;
234#endif
235
237 std::string *point_labels;
238
240 std::string *block_labels;
241
242// width for one box in 0.1mm
243// width_10 is 1 10th of width
244// example: width = 40, width_10 = 4
245
248 int read_arguments(
249 int argc, std::string *argv,
250 int verbose_level);
251 void print();
252
253};
254
255// #############################################################################
256// draw_mod_n_description.cpp
257// #############################################################################
258
259
261
262
264public:
265
266 int f_n;
267 int n;
268
270 int mod_s;
271
274
276 std::string fname;
281
285
288
289
292 int read_arguments(
293 int argc, std::string *argv,
294 int verbose_level);
295 void print();
296
297};
298
299
300// #############################################################################
301// draw_projective_curve_description.cpp
302// #############################################################################
303
304
306
307
309public:
310
313
315 std::string fname;
316
319
322
325
326
327
330 int read_arguments(
331 int argc, std::string *argv,
332 int verbose_level);
333 void print();
334
335};
336
337
338
339// #############################################################################
340// drawable_set_of_objects.cpp
341// #############################################################################
342
343
344
346
347
348
350
351public:
352
354
355 int type;
356 // 1 = sphere
357 // 2 = cylinder
358 // 3 = prisms (faces)
359 // 4 = planes
360 // 5 = lines
361 // 6 = cubics
362 // 7 = quadrics
363 // 8 = quartics
364 // 9 = quintics
365 // 10 = octics
366 // 11 = label
367
368
369 double d;
370 double d2; // for text: scale
371
372 std::string properties;
373
376 void init_spheres(int group_idx, double rad,
377 std::string &properties, int verbose_level);
378 void init_cylinders(int group_idx,
379 double rad, std::string &properties, int verbose_level);
380 void init_prisms(int group_idx,
381 double thickness, std::string &properties, int verbose_level);
382 void init_planes(int group_idx,
383 std::string &properties, int verbose_level);
384 void init_lines(int group_idx,
385 double rad, std::string &properties, int verbose_level);
386 void init_cubics(int group_idx,
387 std::string &properties, int verbose_level);
388 void init_quadrics(int group_idx,
389 std::string &properties, int verbose_level);
390 void init_quartics(int group_idx,
391 std::string &properties, int verbose_level);
392 void init_quintics(int group_idx,
393 std::string &properties, int verbose_level);
394 void init_octics(int group_idx,
395 std::string &properties, int verbose_level);
396 void init_labels(int group_idx,
397 double thickness_half, double scale, std::string &properties, int verbose_level);
398 void draw(animate *Anim, std::ostream &ost,
399 int f_group_is_animated, int frame, int verbose_level);
400
401};
402
403
404// #############################################################################
405// graphical_output.cpp
406// #############################################################################
407
409
410
412
413private:
414
415public:
416
421
422
425 void draw_layered_graph_from_file(std::string &fname,
427 int verbose_level);
428 void do_create_points_on_quartic(double desired_distance, int verbose_level);
429 void do_create_points_on_parabola(double desired_distance, int N,
430 double a, double b, double c, int verbose_level);
431 void do_smooth_curve(std::string &curve_label,
432 double desired_distance, int N,
433 double t_min, double t_max, double boundary,
434 function_polish_description *FP_descr, int verbose_level);
435 void draw_bitmap(draw_bitmap_control *C, int verbose_level);
437 layered_graph_draw_options *Opt, int verbose_level);
439 int number, int animate_step, int animate_nb_of_steps,
440 int f_transition, int transition_step, int transition_nb_steps,
441 int f_title_page, int title_page_step,
442 int f_trailer_page, int trailer_page_step);
443 void tree_draw(tree_draw_options *Tree_draw_options, int verbose_level);
444 void animate_povray(
445 povray_job_description *Povray_job_description,
446 int verbose_level);
447
448};
449
450
451// #############################################################################
452// layered_graph_draw_options.cpp
453// #############################################################################
454
456
458public:
459
464
465 int xin;
466 int yin;
467 int xout;
468 int yout;
469
470
472
473
476 int rad;
482 double x_stretch;
484 double y_stretch;
485
487 double scale;
488
491
493
494
497 std::string select_layers;
500
501
504 int x_max, int y_max, int f_rotated, int dx, int dy);
507 int x_max, int y_max, int f_rotated, int dx, int dy);
510 int layer, int node, int x, int y, int dx, int dy);
511
515
518 int read_arguments(
519 int argc, std::string *argv,
520 int verbose_level);
521 void print();
522};
523
524
525// #############################################################################
526// mp_graphics.cpp
527// #############################################################################
528
530
533 double origin_x;
534 double origin_y;
535 int m; // number of rows in the grid
536 int n; // number of columns in the grid
537 double dx;
538 double dy;
539};
540
541
543
544
546
547 layered_graph_draw_options *Draw_options;
548
549 //std::string fname_base;
550 std::string fname_mp;
551 std::string fname_log;
552 std::string fname_tikz;
553 std::ofstream fp_mp;
554 std::ofstream fp_log;
555 std::ofstream fp_tikz;
556 int f_file_open;
557
558
559 // coordinate systems:
560
561 int user[4]; // llx/lly/urx/ury
562 int dev[4]; // llx/lly/urx/ury
563
564 int x_min, x_max, y_min, y_max, f_min_max_set;
565
566 int txt_halign;
567 // 0=left aligned,
568 // 1=centered,
569 // 2=right aligned;
570 // default=0
571 int txt_valign; // 0=bottom, 1=middle, 2=top; default=0
572 int txt_boxed; // default=0
573 int txt_overwrite; // default=0
574 int txt_rotate; // default = 0 (in degree)
575
576 int line_beg_style; // default=0
577 int line_end_style; // 0=nothing, 1=arrow; default=0
578
579 int line_thickness; // 1,2,3
580 int line_color; // 0=white, 1=black, 2=red, 3=green
581
582
583 int fill_interior;
584 // in 1/100th,
585 // 0= none (used for pie-drawing);
586 // default=0
587 int fill_color; // 0 = white, 1 = black; default=0
588 int fill_shape; // 0 = .., 1 = -- ; default=1
589 int fill_outline; // default=0
590 int fill_nofill; // default=0
591
592
593 int line_dashing;
594 // 0 = no dashing,
595 // otherwise scaling factor 1/100th evenly
596 // default=0
597
598 int cur_path;
599
600
601public:
602
603 mp_graphics();
604 ~mp_graphics();
605 void init(
606 std::string &file_name,
607 layered_graph_draw_options *Draw_options,
608 int verbose_level);
609 void exit(std::ostream &ost, int verbose_level);
610 void frame(double move_out);
611 void frame_constant_aspect_ratio(double move_out);
612 void finish(std::ostream &ost, int verbose_level);
613
614 int& in_xmin();
615 int& in_ymin();
616 int& in_xmax();
617 int& in_ymax();
618 int& out_xmin();
619 int& out_ymin();
620 int& out_xmax();
621 int& out_ymax();
622
623 void user2dev(int &x, int &y);
624 void dev2user(int &x, int &y);
625 void user2dev_dist_x(int &x);
626 void user2dev_dist_y(int &y);
627
628 void draw_polar_grid(double r_max, int nb_circles,
629 int nb_rays, double x_stretch);
632 double x_min, double x_max,
633 double y_min, double y_max,
634 double dx, double dy,
635 int f_x_axis_at_y_min, int f_y_axis_at_x_min,
636 int x_mod, int y_mod, int x_tick_mod, int y_tick_mod,
637 double x_labels_offset, double y_labels_offset,
638 double x_tick_half_width, double y_tick_half_width,
639 int f_v_lines, int subdivide_v,
640 int f_h_lines, int subdivide_h,
641 int verbose_level);
642 void plot_curve(int N, int *f_DNE,
643 double *Dx, double *Dy, double dx, double dy);
644 void nice_circle(int x, int y, int rad);
645 void grid_polygon2(grid_frame *F, int x0, int y0,
646 int x1, int y1);
647 void grid_polygon4(grid_frame *F, int x0, int y0,
648 int x1, int y1, int x2, int y2, int x3, int y3);
649 void grid_polygon5(grid_frame *F, int x0, int y0,
650 int x1, int y1, int x2, int y2,
651 int x3, int y3, int x4, int y4);
652 void polygon(int *Px, int *Py, int n);
653 void polygon2(int *Px, int *Py, int i1, int i2);
654 void polygon3(int *Px, int *Py, int i1, int i2, int i3);
655 void polygon4(int *Px, int *Py, int i1, int i2, int i3,
656 int i4);
657 void polygon5(int *Px, int *Py, int i1, int i2, int i3,
658 int i4, int i5);
659 void polygon6(int *Px, int *Py, int i1, int i2, int i3,
660 int i4, int i5, int i6);
661 void polygon7(int *Px, int *Py, int i1, int i2, int i3,
662 int i4, int i5, int i6, int i7);
663 void polygon8(int *Px, int *Py, int i1, int i2, int i3,
664 int i4, int i5, int i6, int i7, int i8);
665 void polygon9(int *Px, int *Py, int i1, int i2, int i3,
666 int i4, int i5, int i6, int i7, int i8, int i9);
667 void polygon10(int *Px, int *Py, int i1, int i2, int i3,
668 int i4, int i5, int i6, int i7, int i8, int i9,
669 int i10);
670 void polygon11(int *Px, int *Py, int i1, int i2, int i3,
671 int i4, int i5, int i6, int i7, int i8, int i9,
672 int i10, int i11);
673 void polygon_idx(int *Px, int *Py, int *Idx, int n);
674 void bezier(int *Px, int *Py, int n);
675 void bezier2(int *Px, int *Py, int i1, int i2);
676 void bezier3(int *Px, int *Py, int i1, int i2, int i3);
677 void bezier4(int *Px, int *Py, int i1, int i2, int i3,
678 int i4);
679 void bezier5(int *Px, int *Py, int i1, int i2, int i3,
680 int i4, int i5);
681 void bezier6(int *Px, int *Py, int i1, int i2, int i3,
682 int i4, int i5, int i6);
683 void bezier7(int *Px, int *Py, int i1, int i2, int i3,
684 int i4, int i5, int i6, int i7);
685 void bezier_idx(int *Px, int *Py, int *Idx, int n);
687 int x0, int y0, int x1, int y1, int x2,
688 int y2, int x3, int y3);
690 int x0, int y0, int x1, int y1,
691 int x2, int y2, int x3, int y3,
692 int x4, int y4);
693 void fill_polygon3(int *Px, int *Py, int i1, int i2, int i3);
694 void fill_polygon4(int *Px, int *Py, int i1, int i2, int i3,
695 int i4);
696 void fill_polygon5(int *Px, int *Py, int i1, int i2, int i3,
697 int i4, int i5);
698 void fill_polygon6(int *Px, int *Py, int i1, int i2, int i3,
699 int i4, int i5, int i6);
700 void fill_polygon7(int *Px, int *Py, int i1, int i2, int i3,
701 int i4, int i5, int i6, int i7);
702 void fill_polygon8(int *Px, int *Py, int i1, int i2, int i3,
703 int i4, int i5, int i6, int i7, int i8);
704 void fill_polygon9(int *Px, int *Py, int i1, int i2, int i3,
705 int i4, int i5, int i6, int i7, int i8, int i9);
706 void fill_polygon10(int *Px, int *Py, int i1, int i2, int i3,
707 int i4, int i5, int i6, int i7, int i8, int i9, int i10);
708 void fill_polygon11(int *Px, int *Py, int i1, int i2, int i3,
709 int i4, int i5, int i6, int i7, int i8,
710 int i9, int i10, int i11);
711 void polygon2_arrow_halfway(int *Px, int *Py, int i1, int i2);
712 void polygon2_arrow_halfway_and_label(int *Px, int *Py, int i1, int i2,
713 const char *alignment, const char *txt);
714 void grid_aligned_text(grid_frame *F, int x, int y,
715 const char *alignment, const char *p);
716 void aligned_text(int x, int y, const char *alignment, const char *p);
717 void aligned_text_array(int *Px, int *Py, int idx,
718 const char *alignment, const char *p);
719 void aligned_text_with_offset(int x, int y, int xoffset, int yoffset,
720 const char *alignment, const char *p);
721
722 void st_alignment(int txt_halign, int txt_valign);
723 void sl_udsty(int line_dashing);
724 void sl_ends(int line_beg_style, int line_end_style);
725 void sl_thickness(int line_thickness);
726 void sl_color(int line_color);
727 void sf_interior(int fill_interior);
728 void sf_color(int fill_color);
729 void sf_shape(int fill_shape);
730 void sf_outline(int fill_outline);
731 void sf_nofill(int fill_nofill);
732 void st_boxed(int txt_boxed);
733 void st_overwrite(int txt_overwrite);
734 void st_rotate(int txt_rotate);
735 void coords_min_max(int x, int y);
736
737 // output commands:
738 void header();
739 void footer();
740 void begin_figure(int factor_1000);
741 void end_figure();
742
743 void comment(const char *p);
744 void text(int x, int y, const char *p);
745 void circle(int x, int y, int rad);
746 void circle_text(int x, int y, int rad, const char *text);
747 void polygon_idx2(int *Px, int *Py, int *Idx, int n,
748 int f_cycle);
749 void bezier_idx2(int *Px, int *Py, int *Idx, int n,
750 int f_cycle);
751 void fill_idx(int *Px, int *Py, int *Idx, int n,
752 const char *symbol, int f_cycle);
753
754
755 // output commands log file:
756 void header_log(std::string &str_date);
757 void footer_log();
758 void comment_log(const char *p);
759 void st_alignment_log();
760 void sl_udsty_log();
761 void sl_ends_log();
762 void sl_thickness_log();
763 void sl_color_log();
764 void sf_interior_log();
765 void sf_color_log();
766 void sf_shape_log();
767 void sf_outline_log();
768 void sf_nofill_log();
769 void st_boxed_log();
770 void st_overwrite_log();
771 void st_rotate_log();
772 void bezier_idx_log(int *Px, int *Py, int *Idx, int n);
773 void polygon_log(int *Px, int *Py, int n);
774 void polygon_idx_log(int *Px, int *Py, int *Idx, int n);
775 void text_log(int x1, int y1, const char *p);
776 void circle_log(int x1, int y1, int rad);
777
778
779 // output commands metapost:
780 void header_mp(std::string &str_date);
781 void footer_mp();
782 void comment_mp(const char *p);
783 void text_mp(int x1, int y1, const char *p);
784 void begin_figure_mp(int factor_1000);
785 void end_figure_mp();
786 void circle_mp(int x, int y, int rad);
787 void output_circle_text_mp(int x, int y, int idx, const char *text);
788 void polygon_idx_mp(int *Px, int *Py,
789 int *Idx, int n, int f_cycle);
790 void bezier_idx_mp(int *Px, int *Py,
791 int *Idx, int n, int f_cycle);
792 void color_tikz(std::ofstream &fp, int color);
793 void fill_idx_mp(int *Px, int *Py, int *Idx, int n,
794 const char *symbol, int f_cycle);
795 void output_xy_metapost(int x, int y);
796 void output_x_metapost(int x);
797 void output_y_metapost(int y);
798 int get_label(int x, int y);
799 void get_alignment_mp(char *align);
800 void line_thickness_mp();
801
802 // output commands tikz:
803 void header_tikz(std::string &str_date);
804 void footer_tikz();
805 void comment_tikz(const char *p);
806 void text_tikz(int x1, int y1, const char *p);
807 void circle_tikz(int x, int y, int rad);
808 void output_circle_text_tikz(int x, int y, int idx, int rad,
809 const char *text);
810 void polygon_idx_tikz(int *Px, int *Py,
811 int *Idx, int n, int f_cycle);
812 void bezier_idx_tikz(int *Px, int *Py,
813 int *Idx, int n, int f_cycle);
814 void fill_idx_tikz(std::ofstream &fp,
815 int *Px, int *Py, int *Idx, int n,
816 const char *symbol, int f_cycle);
817 void output_xy_tikz(int x, int y);
818 void output_x_tikz(int x);
819 void output_y_tikz(int y);
820
821 void polygon3D(int *Px, int *Py,
822 int dim, int x0, int y0, int z0, int x1, int y1, int z1);
823 void integer_4pts(int *Px, int *Py,
824 int p1, int p2, int p3, int p4,
825 const char *align, int a);
826 void text_4pts(int *Px, int *Py, int p1, int p2, int p3, int p4,
827 const char *align, const char *str);
828
829
830 void draw_graph(int x, int y,
831 int dx, int dy, int nb_V, long int *Edges, int nb_E, int radius,
832 int verbose_level);
834 int x, int y,
835 int dx, int dy, int nb_V, long int *Edges, int nb_E,
836 int distinguished_edge, int verbose_level);
837 void draw_graph_on_multiple_circles(int x, int y,
838 int dx, int dy, int nb_V, int *Edges, int nb_E, int nb_circles);
840 int x, int y, int dx, int dy, int rad, int nb_V,
841 int *Edges, int nb_E, int *coords_2D, int *Base,
842 int f_point_labels, int point_label_offset, int f_directed);
843 void draw_tournament(int x, int y,
844 int dx, int dy, int nb_V, long int *Edges, int nb_E,
845 int radius,
846 int verbose_level);
847 void draw_bitmatrix2(int f_dots,
848 int f_partition, int nb_row_parts, int *row_part_first,
849 int nb_col_parts, int *col_part_first,
850 int f_row_grid, int f_col_grid,
851 int f_bitmatrix, data_structures::bitmatrix *Bitmatrix, int *M,
852 int m, int n,
853 int f_has_labels, int *labels);
854
855 void draw_density2(int no,
856 int *outline_value, int *outline_number, int outline_sz,
857 int min_value, int max_value, int offset_x, int f_switch_x,
858 int f_title, const char *title,
859 const char *label_x,
860 int f_circle, int circle_at, int circle_rad,
861 int f_mu, int f_sigma, int nb_standard_deviations,
862 int f_v_grid, int v_grid, int f_h_grid, int h_grid);
864 int **outline_value, int **outline_number,
865 int *outline_sz, int nb_curves,
866 int min_x, int max_x, int min_y, int max_y,
867 int offset_x, int f_switch_x,
868 int f_title, const char *title,
869 const char *label_x,
870 int f_v_grid, int v_grid, int f_h_grid, int h_grid,
871 int f_v_logarithmic, double log_base);
874 int q,
875 int *Table, int nb,
876 int f_point_labels, char **Point_labels, int verbose_level);
878 int f_row_grid, int f_col_grid,
879 int *Table, int nb_colors,
880 int m, int n,
881 int *color_scale, int nb_colors_in_scale,
882 int f_has_labels, int *labels);
883 void domino_draw1(int M,
884 int i, int j, int dx, int dy, int rad, int f_horizontal);
885 void domino_draw2(int M,
886 int i, int j, int dx, int dy, int rad, int f_horizontal);
887 void domino_draw3(int M,
888 int i, int j, int dx, int dy, int rad, int f_horizontal);
889 void domino_draw4(int M,
890 int i, int j, int dx, int dy, int rad, int f_horizontal);
891 void domino_draw5(int M,
892 int i, int j, int dx, int dy, int rad, int f_horizontal);
893 void domino_draw6(int M,
894 int i, int j, int dx, int dy, int rad, int f_horizontal);
895 void domino_draw7(int M,
896 int i, int j, int dx, int dy, int rad, int f_horizontal);
897 void domino_draw8(int M,
898 int i, int j, int dx, int dy, int rad, int f_horizontal);
899 void domino_draw9(int M,
900 int i, int j, int dx, int dy, int rad, int f_horizontal);
901 void domino_draw_assignment_East(int Ap, int Aq, int M,
902 int i, int j, int dx, int dy, int rad);
903 void domino_draw_assignment_South(int Ap, int Aq, int M,
904 int i, int j, int dx, int dy, int rad);
905 void domino_draw_assignment(int *A, int *matching, int *B,
906 int M, int N,
907 int dx, int dy,
908 int rad, int edge,
909 int f_grid, int f_gray, int f_numbers, int f_frame,
910 int f_cost, int cost);
911};
912
913
914// #############################################################################
915// parametric_curve_point.cpp
916// #############################################################################
917
919
921public:
922
923 double t;
925 std::vector<double> coords;
926
929 void init(double t, int f_is_valid, double *x,
930 int nb_dimensions, int verbose_level);
931};
932
933// #############################################################################
934// parametric_curve.cpp
935// #############################################################################
936
938
940public:
941
944 double t0, t1; // parameter interval
945 int (*compute_point_function)(double t, double *pt, void *extra_data, int verbose_level);
947 double boundary;
948
950 std::vector<parametric_curve_point> Pts;
951
954 void init(int nb_dimensions,
955 double desired_distance,
956 double t0, double t1,
957 int (*compute_point_function)(double t, double *pt, void *extra_data, int verbose_level),
958 void *extra_data,
959 double boundary,
960 int N,
961 int verbose_level);
962
963};
964
965// #############################################################################
966// plot_tools.cpp
967// #############################################################################
968
970
971
973
974public:
975 plot_tools();
976 ~plot_tools();
977
978 void draw_density(
979 layered_graph_draw_options *Draw_options,
980 char *prefix, int *the_set, int set_size,
981 int f_title, const char *title, int out_of,
982 const char *label_x,
983 int f_circle, int circle_at, int circle_rad,
984 int f_mu, int f_sigma, int nb_standard_deviations,
985 int f_v_grid, int v_grid, int f_h_grid, int h_grid,
986 int offset_x,
987 int f_switch_x, int no, int f_embedded,
988 int verbose_level);
990 layered_graph_draw_options *Draw_options,
991 std::string &prefix,
992 int **Data, int *Data_size, int nb_data_sets,
993 int f_title, const char *title, int out_of,
994 const char *label_x,
995 int f_v_grid, int v_grid, int f_h_grid, int h_grid,
996 int offset_x, int f_switch_x,
997 int f_v_logarithmic, double log_base, int no, int f_embedded,
998 int verbose_level);
999 void get_coord(int *Px, int *Py, int idx, int x, int y,
1000 int min_x, int min_y, int max_x, int max_y, int f_switch_x);
1001 void get_coord_log(int *Px, int *Py, int idx, int x, int y,
1002 int min_x, int min_y, int max_x, int max_y,
1003 double log_base, int f_switch_x);
1004 void y_to_pt_on_curve(int y_in, int &x, int &y,
1005 int *outline_value, int *outline_number, int outline_sz);
1006 void projective_plane_draw_grid(std::string &fname,
1008 int q, int *Table, int nb,
1009 int f_point_labels, char **Point_labels,
1010 int verbose_level);
1013 int verbose_level);
1017 int verbose_level);
1019 std::string &fname,
1022 long int *Pts, int nb_pts,
1023 int f_point_labels,
1024 int verbose_level);
1025
1026};
1027
1028
1029
1030// #############################################################################
1031// povray_interface.cpp
1032// #############################################################################
1033
1035
1036
1037
1039public:
1040
1041
1043 std::string color_white;
1045 std::string color_black;
1046 std::string color_pink;
1048 std::string color_green;
1049 std::string color_gold;
1050 std::string color_red;
1051 std::string color_blue;
1052 std::string color_yellow;
1054 std::string color_scarlet;
1055 std::string color_brown;
1056 std::string color_orange;
1059 std::string color_chrome;
1060 std::string color_gold_dode;
1064
1065 double sky[3];
1066 double location[3];
1067 double look_at[3];
1068
1069
1072 void beginning(std::ostream &ost,
1073 double angle,
1074 double *sky,
1075 double *location,
1076 double *look_at,
1077 int f_with_background);
1078 void animation_rotate_around_origin_and_1_1_1(std::ostream &ost);
1080 std::ostream &ost);
1082 double angle_x_deg, double angle_y_deg, double angle_z_deg, std::ostream &ost);
1084 double *v, double angle_zero_one, std::ostream &ost);
1085 void union_start(std::ostream &ost);
1086 void union_end(std::ostream &ost, double scale_factor, double clipping_radius);
1087 void union_end_box_clipping(std::ostream &ost, double scale_factor,
1088 double box_x, double box_y, double box_z);
1089 void union_end_no_clipping(std::ostream &ost, double scale_factor);
1090 void bottom_plane(std::ostream &ost);
1091 void rotate_111(int h, int nb_frames, std::ostream &fp);
1092 void rotate_around_z_axis(int h, int nb_frames, std::ostream &fp);
1093 void ini(std::ostream &ost, const char *fname_pov, int first_frame,
1094 int last_frame);
1095};
1096
1097// #############################################################################
1098// povray_job_description.cpp
1099// #############################################################################
1100
1102
1103
1104
1106public:
1107
1109 std::string output_mask;
1115 std::string rounds_as_string;
1117
1118 // for povray_worker:
1120
1123 int read_arguments(
1124 int argc, std::string *argv,
1125 int verbose_level);
1126 void print();
1127
1128};
1129
1130
1131
1132// #############################################################################
1133// scene.cpp
1134// #############################################################################
1135
1136#define SCENE_MAX_LINES 100000
1137#define SCENE_MAX_EDGES 100000
1138#define SCENE_MAX_POINTS 200000
1139#define SCENE_MAX_PLANES 10000
1140#define SCENE_MAX_QUADRICS 10000
1141#define SCENE_MAX_OCTICS 100
1142#define SCENE_MAX_QUARTICS 1000
1143#define SCENE_MAX_QUINTICS 500
1144#define SCENE_MAX_CUBICS 10000
1145#define SCENE_MAX_FACES 200000
1146
1147
1149
1150
1151
1152class scene {
1153
1154private:
1155
1156 double *Line_coords;
1157 // [nb_lines * 6] a line is given by two points
1158
1159 int *Edge_points;
1160 // [nb_edges * 2]
1161
1162 double *Point_coords;
1163 // [nb_points * 3]
1164
1165 double *Plane_coords;
1166 // [nb_planes * 4]
1167 // the four parameters A,B,C,D as needed for the povray command
1168 // plane{<A,B,C>, D}
1169
1170 double *Quadric_coords;
1171 // [nb_quadrics * 10]
1172
1173 double *Cubic_coords;
1174 // [nb_cubics * 20]
1175
1176 double *Quartic_coords;
1177 // [nb_quartics * 35]
1178
1179 double *Quintic_coords;
1180 // [nb_quintics * 56]
1181
1182 double *Octic_coords;
1183 // [nb_quartics * 165]
1184
1185 int *Nb_face_points; // [nb_faces]
1186 int **Face_points; // [nb_faces]
1187
1188public:
1189
1190
1191 std::vector<std::pair<int, std::string> > Labels;
1192
1193
1195
1197
1199
1201
1203
1205
1207
1209
1211
1213
1215
1217 std::vector<std::vector<int> > group_of_things;
1218
1219 std::vector<int> animated_groups;
1220
1221 std::vector<drawable_set_of_objects> Drawables;
1222
1223
1224
1226
1230
1231
1232 scene();
1233 ~scene();
1234 void null();
1235 void freeself();
1236 double label(int idx, std::string &txt);
1237 double point_coords(int idx, int j);
1238 double line_coords(int idx, int j);
1239 double plane_coords(int idx, int j);
1240 double cubic_coords(int idx, int j);
1241 double quadric_coords(int idx, int j);
1242 int edge_points(int idx, int j);
1243 void print_point_coords(int idx);
1244 double point_distance_euclidean(int pt_idx, double *y);
1245 double point_distance_from_origin(int pt_idx);
1246 double distance_euclidean_point_to_point(int pt1_idx, int pt2_idx);
1247 void init(int verbose_level);
1248 scene *transformed_copy(double *A4, double *A4_inv,
1249 double rad, int verbose_level);
1250 void print();
1251 void transform_lines(scene *S, double *A4, double *A4_inv,
1252 double rad, int verbose_level);
1253 void copy_edges(scene *S, double *A4, double *A4_inv,
1254 int verbose_level);
1255 void transform_points(scene *S, double *A4, double *A4_inv,
1256 int verbose_level);
1257 void transform_planes(scene *S, double *A4, double *A4_inv,
1258 int verbose_level);
1259 void transform_quadrics(scene *S, double *A4, double *A4_inv,
1260 int verbose_level);
1261 void transform_cubics(scene *S, double *A4, double *A4_inv,
1262 int verbose_level);
1263 void transform_quartics(scene *S, double *A4, double *A4_inv,
1264 int verbose_level);
1265 void transform_quintics(scene *S, double *A4, double *A4_inv,
1266 int verbose_level);
1267 void copy_faces(scene *S, double *A4, double *A4_inv,
1268 int verbose_level);
1269 int line_pt_and_dir(double *x6, double rad, int verbose_level);
1270 int line_pt_and_dir_and_copy_points(double *x6, double rad, int verbose_level);
1271 int line_through_two_pts(double *x6, double rad);
1272 int line6(double *x6);
1273 int line(double x1, double x2, double x3,
1274 double y1, double y2, double y3);
1275 int line_after_recentering(double x1, double x2, double x3,
1276 double y1, double y2, double y3, double rad);
1277 int line_through_two_points(int pt1, int pt2,
1278 double rad);
1279 int edge(int pt1, int pt2);
1280 void points(double *Coords, int nb_points);
1281 int point(double x1, double x2, double x3);
1282 int point_center_of_mass_of_face(int face_idx);
1283 int point_center_of_mass_of_edge(int edge_idx);
1284 int point_center_of_mass(int *Pt_idx, int nb_pts);
1285 int triangle(int line1, int line2, int line3, int verbose_level);
1286 int point_as_intersection_of_two_lines(int line1, int line2);
1287 int plane_from_dual_coordinates(double *x4);
1288 int plane(double x1, double x2, double x3, double a);
1289 // A plane is called a polynomial shape because
1290 // it is defined by a first order polynomial equation.
1291 // Given a plane: plane { <A, B, C>, D }
1292 // it can be represented by the equation
1293 // A*x + B*y + C*z - D*sqrt(A^2 + B^2 + C^2) = 0.
1294 // see http://www.povray.org/documentation/view/3.6.1/297/
1295 int plane_through_three_points(int pt1, int pt2, int pt3);
1296 int quadric_through_three_lines(int line_idx1,
1297 int line_idx2, int line_idx3, int verbose_level);
1298 int quintic(double *coeff_56);
1299 int octic(double *coeff_165);
1300 int quadric(double *coeff);
1301 // povray ordering of monomials:
1302 // http://www.povray.org/documentation/view/3.6.1/298/
1303 // 1: x^2
1304 // 2: xy
1305 // 3: xz
1306 // 4: x
1307 // 5: y^2
1308 // 6: yz
1309 // 7: y
1310 // 8: z^2
1311 // 9: z
1312 // 10: 1
1313 int cubic_in_orbiter_ordering(double *coeff);
1314 int cubic(double *coeff);
1315 // povray ordering of monomials:
1316 // http://www.povray.org/documentation/view/3.6.1/298/
1317 // 1: x^3
1318 // 2: x^2y
1319 // 3: x^2z
1320 // 4: x^2
1321 // 5: xy^2
1322 // 6: xyz
1323 // 7: xy
1324 // 8: xz^2
1325 // 9: xz
1326 // 10: x
1327 // 11: y^3
1328 // 12: y^2z
1329 // 13: y^2
1330 // 14: yz^2
1331 // 15: yz
1332 // 16: y
1333 // 17: z^3
1334 // 18: z^2
1335 // 19: z
1336 // 20: 1
1337 void deformation_of_cubic_lex(int nb_frames,
1338 double angle_start, double angle_max, double angle_min,
1339 double *coeff1, double *coeff2,
1340 int verbose_level);
1341 int cubic_Goursat_ABC(double A, double B, double C);
1342 int quartic(double *coeff);
1343 int face(int *pts, int nb_pts);
1344 int face3(int pt1, int pt2, int pt3);
1345 int face4(int pt1, int pt2, int pt3, int pt4);
1346 int face5(int pt1, int pt2, int pt3, int pt4, int pt5);
1347 void draw_lines_with_selection(int *selection, int nb_select,
1348 std::string &options, std::ostream &ost);
1349 void draw_line_with_selection(int line_idx,
1350 std::string &options, std::ostream &ost);
1351 void draw_lines_cij_with_selection(int *selection, int nb_select,
1352 std::ostream &ost);
1353 void draw_lines_cij(std::ostream &ost);
1354 void draw_lines_cij_with_offset(int offset, int number_of_lines, std::ostream &ost);
1355 void draw_lines_ai_with_selection(int *selection, int nb_select,
1356 std::ostream &ost);
1357 void draw_lines_ai(std::ostream &ost);
1358 void draw_lines_ai_with_offset(int offset, std::ostream &ost);
1359 void draw_lines_bj_with_selection(int *selection, int nb_select,
1360 std::ostream &ost);
1361 void draw_lines_bj(std::ostream &ost);
1362 void draw_lines_bj_with_offset(int offset, std::ostream &ost);
1363 void draw_edges_with_selection(int *selection, int nb_select,
1364 std::string &options, std::ostream &ost);
1365 void draw_faces_with_selection(int *selection, int nb_select,
1366 double thickness_half, std::string &options, std::ostream &ost);
1367 void draw_face(int idx, double thickness_half, std::string &options,
1368 std::ostream &ost);
1369 void draw_planes_with_selection(int *selection, int nb_select,
1370 std::string &options, std::ostream &ost);
1371 void draw_plane(int idx, std::string &options, std::ostream &ost);
1372 void draw_points_with_selection(int *selection, int nb_select,
1373 double rad, std::string &options, std::ostream &ost);
1374 void draw_cubic_with_selection(int *selection, int nb_select,
1375 std::string &options, std::ostream &ost);
1376 void draw_quartic_with_selection(int *selection, int nb_select,
1377 std::string &options, std::ostream &ost);
1378 void draw_quintic_with_selection(int *selection, int nb_select,
1379 std::string &options, std::ostream &ost);
1380 void draw_octic_with_selection(int *selection, int nb_select,
1381 std::string &options, std::ostream &ost);
1382 void draw_quadric_with_selection(int *selection, int nb_select,
1383 std::string &options, std::ostream &ost);
1384 void draw_quadric_clipped_by_plane(int quadric_idx, int plane_idx,
1385 std::string &options, std::ostream &ost);
1386 void draw_line_clipped_by_plane(int line_idx, int plane_idx,
1387 std::string &options, std::ostream &ost);
1388 int intersect_line_and_plane(int line_idx, int plane_idx,
1389 int &intersection_point_idx,
1390 int verbose_level);
1391 int intersect_line_and_line(int line1_idx, int line2_idx,
1392 double &lambda,
1393 int verbose_level);
1394 int line_extended(double x1, double x2, double x3,
1395 double y1, double y2, double y3,
1396 double r);
1397 void map_a_line(int line1, int line2,
1398 int plane_idx, int line_idx, double spread,
1399 int nb_pts,
1400 int *New_line_idx, int &nb_new_lines,
1401 int *New_pt_idx, int &nb_new_points, int verbose_level);
1402 int map_a_point(int line1, int line2,
1403 int plane_idx, double pt_in[3],
1404 int &new_line_idx, int &new_pt_idx,
1405 int verbose_level);
1406 void fourD_cube(double rad_desired);
1407 void rescale(int first_pt_idx, double rad_desired);
1408 double euclidean_distance(int pt1, int pt2);
1409 double distance_from_origin(int pt);
1410 void fourD_cube_edges(int first_pt_idx);
1411 void hypercube(int n, double rad_desired);
1412 void Dodecahedron_points();
1413 void Dodecahedron_edges(int first_pt_idx);
1414 void Dodecahedron_planes(int first_pt_idx);
1415 void tritangent_planes();
1416
1417 // Clebsch version 1:
1418 void clebsch_cubic();
1419 void clebsch_cubic_lines_a();
1420 void clebsch_cubic_lines_b();
1423
1424 // Clebsch version 2:
1430
1431 double distance_between_two_points(int pt1, int pt2);
1432 void create_five_plus_one();
1433 void create_Clebsch_surface(int verbose_level);
1434 // 1 cubic, 27 lines, 7 Eckardt points
1435 void create_Hilbert_Cohn_Vossen_surface(int verbose_level);
1436 // 1 cubic, 27 lines, 54 points, 45 planes
1437 void create_Hilbert_model(int verbose_level);
1438 void create_Cayleys_nodal_cubic(int verbose_level);
1439 void create_Hilbert_cube(int verbose_level);
1440 void create_cube(int verbose_level);
1441 void create_cube_and_tetrahedra(int verbose_level);
1442 void create_affine_space(int q, int verbose_level);
1443 //void create_surface_13_1(int verbose_level);
1444 void create_Eckardt_surface(int N, int verbose_level);
1445 void create_E4_surface(int N, int verbose_level);
1446 void create_twisted_cubic(int N, int verbose_level);
1447 void create_triangulation_of_cube(int N, int verbose_level);
1448 void print_a_line(int line_idx);
1449 void print_a_plane(int plane_idx);
1450 void print_a_face(int face_idx);
1451 void read_obj_file(std::string &fname, int verbose_level);
1452 void add_a_group_of_things(int *Idx, int sz, int verbose_level);
1453 void create_regulus(int idx, int nb_lines, int verbose_level);
1454 void clipping_by_cylinder(int line_idx, double r, std::ostream &ost);
1455 int scan1(int argc, std::string *argv, int &i, int verbose_level);
1456 int scan2(int argc, std::string *argv, int &i, int verbose_level);
1457 int read_scene_objects(int argc, std::string *argv,
1458 int i0, int verbose_level);
1459};
1460
1461
1462// #############################################################################
1463// tree.cpp
1464// #############################################################################
1465
1466
1468
1469
1470class tree {
1471
1472public:
1473
1475
1479
1480 int *path;
1481
1484
1485 tree();
1486 ~tree();
1487 void init(graphics::tree_draw_options *Tree_draw_options,
1488 int xmax, int ymax, int verbose_level);
1489 void draw(std::string &fname,
1490 graphics::tree_draw_options *Tree_draw_options,
1492 int verbose_level);
1493 void draw_preprocess(std::string &fname,
1494 graphics::tree_draw_options *Tree_draw_options,
1496 int verbose_level);
1497 void circle_center_and_radii(int xmax, int ymax, int max_depth,
1498 int &x0, int &y0, int *&rad);
1499 void compute_DFS_ranks(int &nb_nodes, int verbose_level);
1500};
1501
1502// #############################################################################
1503// tree_draw_options.cpp
1504// #############################################################################
1505
1506
1508
1509
1511
1512public:
1513
1515 std::string file_name;
1516
1519
1521 std::string select_path_text;
1522
1525 mp_graphics *G, int *v, int layer, tree_node *N,
1526 int x, int y, int dx, int dy);
1527
1528
1531 int read_arguments(
1532 int argc, std::string *argv,
1533 int verbose_level);
1534 void print();
1535
1536};
1537
1538
1539// #############################################################################
1540// tree_node.cpp
1541// #############################################################################
1542
1543
1545
1546
1548
1549public:
1552
1555
1558
1559 std::string label;
1560
1563
1568
1570
1571 tree_node();
1572 ~tree_node();
1573 void init(int depth, tree_node *parent, int f_value, int value,
1574 int f_has_color, int color, std::string &label,
1575 int verbose_level);
1576 void print_path();
1577 void print_depth_first();
1578 void compute_DFS_rank(int &rk);
1579 int find_node(int &DFS_rk, int *path, int sz, int verbose_level);
1580 int find_node_and_path(std::vector<int> &Rk, int *path, int sz, int verbose_level);
1581 void get_coordinates(int &idx, int *coord_xy);
1582 void get_coordinates_and_width(int &idx, int *coord_xyw);
1583 void calc_weight();
1584 void place_xy(int left, int right, int ymax, int max_depth);
1585 void place_on_circle(int xmax, int ymax, int max_depth);
1586 void add_node(int l, int depth, int *path, int color, std::string &label,
1587 int verbose_level);
1588 int find_child(int val);
1589 void get_values(int *v, int verbose_level);
1590 void draw_edges(mp_graphics &G,
1591 tree_draw_options *Tree_draw_options,
1593 int f_has_parent, int parent_x, int parent_y, int max_depth,
1594 tree *T, int verbose_level);
1595 void draw_vertices(mp_graphics &G,
1596 tree_draw_options *Tree_draw_options,
1598 int f_has_parent, int parent_x, int parent_y, int max_depth,
1599 tree *T, int verbose_level);
1600 void draw_sideways(mp_graphics &G, int f_circletext, int f_i,
1601 int f_has_parent, int parent_x, int parent_y,
1602 int max_depth, int f_edge_labels);
1603 int calc_y_coordinate(int ymax, int l, int max_depth);
1604
1605};
1606
1607
1608// #############################################################################
1609// video_draw_options.cpp:
1610// #############################################################################
1611
1612
1614
1615
1617public:
1618
1621 // 1 = 1,1,1
1622 // 2 = 0,0,1
1623 // 3 = custom
1626 // 1 = sphere
1627 // 2 = box
1628
1631
1634
1637
1638
1639
1640 int f_W;
1641 int W;
1642 int f_H;
1643 int H;
1644
1645 int f_default_angle; // = FALSE;
1646 int default_angle; // = 22;
1647
1648 int f_clipping_radius; // = TRUE;
1649 double clipping_radius; // = 0.9;
1650
1651
1654 double clipping_value[1000];
1655
1657 int camera_round[1000];
1658 double camera_sky[1000 * 3];
1659 double camera_location[1000 * 3];
1660 double camera_look_at[1000 * 3];
1661
1663 int zoom_round[1000];
1664 int zoom_start[1000];
1665 int zoom_end[1000];
1667 double zoom_clipping_end[1000];
1668
1671 std::string zoom_sequence_text[1000];
1672
1674 int pan_round[1000];
1675 int pan_f_reverse[1000];
1676 double pan_from[1000 * 3];
1677 double pan_to[1000 * 3];
1678 double pan_center[1000 * 3];
1679
1682
1685
1689
1693 std::string round_text_text[1000];
1694
1696 int label_round[1000];
1697 int label_start[1000];
1698 int label_sustain[1000];
1699 std::string label_gravity[1000];
1700 std::string label_text[1000];
1701
1707 std::string latex_label_gravity[1000];
1708 std::string latex_label_text[1000];
1710 std::string latex_fname_base[1000];
1711
1712
1714 int picture_round[1000];
1715 double picture_scale[1000];
1716 std::string picture_fname[1000];
1717 std::string picture_options[1000];
1718
1721
1722 double sky[3];
1723 double location[3];
1725 double look_at[3];
1726
1729
1732
1735 int read_arguments(
1736 int argc, std::string *argv,
1737 int verbose_level);
1738 void print();
1739};
1740
1741
1742
1743
1744
1745}}}
1746
1747
1748
1749#endif /* ORBITER_SRC_LIB_FOUNDATIONS_GRAPHICS_GRAPHICS_H_ */
1750
1751
matrices over GF(2) stored as bitvectors
description of a function in reverse polish notation from the command line
Definition: globals.h:61
a set of functions in reverse polish notation
Definition: globals.h:87
projective space PG(n,q) of dimension n over Fq
Definition: geometry.h:1916
a data structure to store layered graphs or Hasse diagrams
Definition: graph_theory.h:654
creates 3D animations using Povray
Definition: graphics.h:29
void draw_text(std::string &text, double thickness_half, double extra_spacing, double scale, double off_x, double off_y, double off_z, std::string &color_options, int idx_point, std::ostream &ost, int verbose_level)
Definition: animate.cpp:3049
void draw_single_surface_with_color(int surface_idx, std::string &color, std::ostream &fp)
Definition: animate.cpp:765
void draw_Hilbert_red_lines(std::ostream &fp)
Definition: animate.cpp:812
void draw_single_quadric(int idx, std::string &color, std::ostream &fp)
Definition: animate.cpp:749
void draw_frame_Hilbert_round_76(video_draw_options *Opt, int h, int nb_frames, int round, std::ostream &fp, int verbose_level)
Definition: animate.cpp:2296
void draw_Hilbert_cube_boxed(std::ostream &fp)
Definition: animate.cpp:839
povray_job_description * Povray_job_description
Definition: graphics.h:31
void draw_text_with_selection(int *selection, int nb_select, double thickness_half, double extra_spacing, double scale, double off_x, double off_y, double off_z, std::string &options, std::string &group_options, std::ostream &ost, int verbose_level)
Definition: animate.cpp:3191
void draw_frame_five_plus_one(int h, int nb_frames, int round, double clipping_radius, std::ostream &fp, int verbose_level)
Definition: animate.cpp:2798
void union_end(int h, int nb_frames, int round, double clipping_radius, std::ostream &fp)
Definition: animate.cpp:3018
void init(povray_job_description *Povray_job_description, void *extra_data, int verbose_level)
Definition: animate.cpp:42
void draw_Hilbert_red_line(int idx_one_based, std::ostream &fp)
Definition: animate.cpp:800
void draw_Hilbert_blue_line(int idx_one_based, std::ostream &fp)
Definition: animate.cpp:806
void draw_single_surface(int surface_idx, std::ostream &fp)
Definition: animate.cpp:757
void draw_frame_Eckardt_surface(int h, int nb_frames, int round, double clipping_radius, std::ostream &fp, int verbose_level)
Definition: animate.cpp:2423
void draw_Hilbert_line(int line_idx, std::string &color, std::ostream &fp)
Definition: animate.cpp:782
void draw_frame_twisted_cubic(int h, int nb_frames, int round, double clipping_radius, std::ostream &fp, int verbose_level)
Definition: animate.cpp:2709
void draw_Hilbert_tetrahedron_faces(std::ostream &fp)
Definition: animate.cpp:857
void draw_frame_triangulation_of_cube(int h, int nb_frames, int round, double clipping_radius, std::ostream &fp, int verbose_level)
Definition: animate.cpp:2656
void draw_frame_windy(int h, int nb_frames, int round, double clipping_radius, std::ostream &fp, int verbose_level)
Definition: animate.cpp:2864
void(* draw_frame_callback)(animate *A, int frame, int nb_frames_this_round, int round, double clipping, std::ostream &fp, int verbose_level)
Definition: graphics.h:38
void draw_Hilbert_tetrahedron_boxed(std::ostream &fp)
Definition: animate.cpp:848
void draw_Hilbert_cube_extended_edges(std::ostream &fp)
Definition: animate.cpp:824
void draw_Hilbert_plane(int plane_idx, std::string &color, std::ostream &fp)
Definition: animate.cpp:792
void draw_Hilbert_cube_faces(std::ostream &fp)
Definition: animate.cpp:833
void draw_Hilbert_blue_lines(std::ostream &fp)
Definition: animate.cpp:818
void draw_Hilbert_point(int point_idx, double rad, std::string &options, std::ostream &fp)
Definition: animate.cpp:773
void draw_frame_Hilbert(int h, int nb_frames, int round, double clipping_radius, std::ostream &fp, int verbose_level)
Definition: animate.cpp:863
void draw_single_line(int line_idx, std::string &color, std::ostream &fp)
Definition: animate.cpp:741
void animate_one_round(int round, int verbose_level)
Definition: animate.cpp:72
void rotation(int h, int nb_frames, int round, std::ostream &fp)
Definition: animate.cpp:2986
void draw_frame_E4_surface(int h, int nb_frames, int round, double clipping_radius, std::ostream &fp, int verbose_level)
Definition: animate.cpp:2612
int read_arguments(int argc, std::string *argv, int verbose_level)
int read_arguments(int argc, std::string *argv, int verbose_level)
a set of objects that should be drawn with certain povray properties
Definition: graphics.h:349
void init_cylinders(int group_idx, double rad, std::string &properties, int verbose_level)
void init_quintics(int group_idx, std::string &properties, int verbose_level)
void init_planes(int group_idx, std::string &properties, int verbose_level)
void init_cubics(int group_idx, std::string &properties, int verbose_level)
void init_octics(int group_idx, std::string &properties, int verbose_level)
void init_quartics(int group_idx, std::string &properties, int verbose_level)
void init_labels(int group_idx, double thickness_half, double scale, std::string &properties, int verbose_level)
void init_lines(int group_idx, double rad, std::string &properties, int verbose_level)
void init_quadrics(int group_idx, std::string &properties, int verbose_level)
void init_spheres(int group_idx, double rad, std::string &properties, int verbose_level)
void draw(animate *Anim, std::ostream &ost, int f_group_is_animated, int frame, int verbose_level)
void init_prisms(int group_idx, double thickness, std::string &properties, int verbose_level)
a catch-all class for things related to 2D graphics
Definition: graphics.h:411
void animate_povray(povray_job_description *Povray_job_description, int verbose_level)
void draw_layered_graph_from_file(std::string &fname, layered_graph_draw_options *Opt, int verbose_level)
void draw_bitmap(draw_bitmap_control *C, int verbose_level)
void do_create_points_on_parabola(double desired_distance, int N, double a, double b, double c, int verbose_level)
void draw_projective(mp_graphics &G, int number, int animate_step, int animate_nb_of_steps, int f_transition, int transition_step, int transition_nb_steps, int f_title_page, int title_page_step, int f_trailer_page, int trailer_page_step)
void do_create_points_on_quartic(double desired_distance, int verbose_level)
void do_smooth_curve(std::string &curve_label, double desired_distance, int N, double t_min, double t_max, double boundary, function_polish_description *FP_descr, int verbose_level)
void draw_projective_curve(draw_projective_curve_description *Descr, layered_graph_draw_options *Opt, int verbose_level)
void tree_draw(tree_draw_options *Tree_draw_options, int verbose_level)
options for drawing an object of type layered_graph
Definition: graphics.h:457
void(* draw_ending_callback)(graph_theory::layered_graph *LG, mp_graphics *G, int x_max, int y_max, int f_rotated, int dx, int dy)
Definition: graphics.h:506
void(* draw_begining_callback)(graph_theory::layered_graph *LG, mp_graphics *G, int x_max, int y_max, int f_rotated, int dx, int dy)
Definition: graphics.h:503
void(* draw_vertex_callback)(graph_theory::layered_graph *LG, mp_graphics *G, int layer, int node, int x, int y, int dx, int dy)
Definition: graphics.h:509
int read_arguments(int argc, std::string *argv, int verbose_level)
a general 2D graphical output interface (metapost, tikz, postscript)
Definition: graphics.h:545
void bezier4(int *Px, int *Py, int i1, int i2, int i3, int i4)
void domino_draw2(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void domino_draw1(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void fill_polygon7(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7)
void polygon_idx_mp(int *Px, int *Py, int *Idx, int n, int f_cycle)
void polygon_idx(int *Px, int *Py, int *Idx, int n)
void domino_draw_assignment_South(int Ap, int Aq, int M, int i, int j, int dx, int dy, int rad)
void polygon10(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10)
void draw_density2(int no, int *outline_value, int *outline_number, int outline_sz, int min_value, int max_value, int offset_x, int f_switch_x, int f_title, const char *title, const char *label_x, int f_circle, int circle_at, int circle_rad, int f_mu, int f_sigma, int nb_standard_deviations, int f_v_grid, int v_grid, int f_h_grid, int h_grid)
void output_circle_text_tikz(int x, int y, int idx, int rad, const char *text)
void fill_idx(int *Px, int *Py, int *Idx, int n, const char *symbol, int f_cycle)
void domino_draw_assignment_East(int Ap, int Aq, int M, int i, int j, int dx, int dy, int rad)
void text_mp(int x1, int y1, const char *p)
void domino_draw4(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void draw_polar_grid(double r_max, int nb_circles, int nb_rays, double x_stretch)
void aligned_text(int x, int y, const char *alignment, const char *p)
void polygon2(int *Px, int *Py, int i1, int i2)
void plot_curve(int N, int *f_DNE, double *Dx, double *Dy, double dx, double dy)
void grid_fill_polygon5(grid_frame *F, int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
void domino_draw8(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void grid_polygon5(grid_frame *F, int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
void bezier_idx2(int *Px, int *Py, int *Idx, int n, int f_cycle)
void output_circle_text_mp(int x, int y, int idx, const char *text)
void polygon6(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6)
void bezier_idx_log(int *Px, int *Py, int *Idx, int n)
void init(std::string &file_name, layered_graph_draw_options *Draw_options, int verbose_level)
Definition: mp_graphics.cpp:71
void fill_polygon3(int *Px, int *Py, int i1, int i2, int i3)
void fill_polygon11(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10, int i11)
void draw_bitmatrix2(int f_dots, int f_partition, int nb_row_parts, int *row_part_first, int nb_col_parts, int *col_part_first, int f_row_grid, int f_col_grid, int f_bitmatrix, data_structures::bitmatrix *Bitmatrix, int *M, int m, int n, int f_has_labels, int *labels)
void polygon9(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9)
void polygon2_arrow_halfway(int *Px, int *Py, int i1, int i2)
void polygon8(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8)
void polygon11(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10, int i11)
void draw_tournament(int x, int y, int dx, int dy, int nb_V, long int *Edges, int nb_E, int radius, int verbose_level)
void integer_4pts(int *Px, int *Py, int p1, int p2, int p3, int p4, const char *align, int a)
void fill_idx_tikz(std::ofstream &fp, int *Px, int *Py, int *Idx, int n, const char *symbol, int f_cycle)
void bezier_idx(int *Px, int *Py, int *Idx, int n)
void draw_axes_and_grid(layered_graph_draw_options *O, double x_min, double x_max, double y_min, double y_max, double dx, double dy, int f_x_axis_at_y_min, int f_y_axis_at_x_min, int x_mod, int y_mod, int x_tick_mod, int y_tick_mod, double x_labels_offset, double y_labels_offset, double x_tick_half_width, double y_tick_half_width, int f_v_lines, int subdivide_v, int f_h_lines, int subdivide_h, int verbose_level)
void polygon2_arrow_halfway_and_label(int *Px, int *Py, int i1, int i2, const char *alignment, const char *txt)
void text_log(int x1, int y1, const char *p)
void domino_draw3(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void polygon7(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7)
void projective_plane_draw_grid2(layered_graph_draw_options *O, int q, int *Table, int nb, int f_point_labels, char **Point_labels, int verbose_level)
void circle_text(int x, int y, int rad, const char *text)
void draw_matrix_in_color(int f_row_grid, int f_col_grid, int *Table, int nb_colors, int m, int n, int *color_scale, int nb_colors_in_scale, int f_has_labels, int *labels)
void exit(std::ostream &ost, int verbose_level)
void aligned_text_array(int *Px, int *Py, int idx, const char *alignment, const char *p)
void sl_ends(int line_beg_style, int line_end_style)
void domino_draw6(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void text_tikz(int x1, int y1, const char *p)
void bezier2(int *Px, int *Py, int i1, int i2)
void draw_density2_multiple_curves(int no, int **outline_value, int **outline_number, int *outline_sz, int nb_curves, int min_x, int max_x, int min_y, int max_y, int offset_x, int f_switch_x, int f_title, const char *title, const char *label_x, int f_v_grid, int v_grid, int f_h_grid, int h_grid, int f_v_logarithmic, double log_base)
void bezier6(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6)
void grid_polygon2(grid_frame *F, int x0, int y0, int x1, int y1)
void domino_draw5(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void grid_aligned_text(grid_frame *F, int x, int y, const char *alignment, const char *p)
void polygon5(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5)
void draw_graph_on_2D_grid(int x, int y, int dx, int dy, int rad, int nb_V, int *Edges, int nb_E, int *coords_2D, int *Base, int f_point_labels, int point_label_offset, int f_directed)
void bezier_idx_tikz(int *Px, int *Py, int *Idx, int n, int f_cycle)
void draw_graph_with_distinguished_edge(int x, int y, int dx, int dy, int nb_V, long int *Edges, int nb_E, int distinguished_edge, int verbose_level)
void bezier3(int *Px, int *Py, int i1, int i2, int i3)
void fill_polygon6(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6)
void polygon_idx_tikz(int *Px, int *Py, int *Idx, int n, int f_cycle)
void domino_draw9(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void aligned_text_with_offset(int x, int y, int xoffset, int yoffset, const char *alignment, const char *p)
void color_tikz(std::ofstream &fp, int color)
void polygon_idx_log(int *Px, int *Py, int *Idx, int n)
void fill_polygon9(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9)
void bezier7(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7)
void grid_polygon4(grid_frame *F, int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3)
void grid_fill_polygon4(grid_frame *F, int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3)
void polygon4(int *Px, int *Py, int i1, int i2, int i3, int i4)
void fill_polygon4(int *Px, int *Py, int i1, int i2, int i3, int i4)
void domino_draw7(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void polygon3(int *Px, int *Py, int i1, int i2, int i3)
void draw_graph_on_multiple_circles(int x, int y, int dx, int dy, int nb_V, int *Edges, int nb_E, int nb_circles)
void fill_polygon10(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10)
void domino_draw_assignment(int *A, int *matching, int *B, int M, int N, int dx, int dy, int rad, int edge, int f_grid, int f_gray, int f_numbers, int f_frame, int f_cost, int cost)
void polygon_idx2(int *Px, int *Py, int *Idx, int n, int f_cycle)
void text_4pts(int *Px, int *Py, int p1, int p2, int p3, int p4, const char *align, const char *str)
void draw_graph(int x, int y, int dx, int dy, int nb_V, long int *Edges, int nb_E, int radius, int verbose_level)
void fill_polygon5(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5)
void fill_polygon8(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8)
void finish(std::ostream &ost, int verbose_level)
void polygon3D(int *Px, int *Py, int dim, int x0, int y0, int z0, int x1, int y1, int z1)
void fill_idx_mp(int *Px, int *Py, int *Idx, int n, const char *symbol, int f_cycle)
void st_alignment(int txt_halign, int txt_valign)
void bezier_idx_mp(int *Px, int *Py, int *Idx, int n, int f_cycle)
void bezier5(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5)
an individual point on a continuous curve, sampled through parametric_curve
Definition: graphics.h:920
void init(double t, int f_is_valid, double *x, int nb_dimensions, int verbose_level)
a continuous curve sampled by individual points
Definition: graphics.h:939
void init(int nb_dimensions, double desired_distance, double t0, double t1, int(*compute_point_function)(double t, double *pt, void *extra_data, int verbose_level), void *extra_data, double boundary, int N, int verbose_level)
int(* compute_point_function)(double t, double *pt, void *extra_data, int verbose_level)
Definition: graphics.h:945
std::vector< parametric_curve_point > Pts
Definition: graphics.h:950
utility functions for plotting (graphing)
Definition: graphics.h:972
void projective_plane_draw_grid(std::string &fname, layered_graph_draw_options *O, int q, int *Table, int nb, int f_point_labels, char **Point_labels, int verbose_level)
Definition: plot_tools.cpp:354
void draw_mod_n_work(mp_graphics &G, layered_graph_draw_options *O, draw_mod_n_description *Descr, int verbose_level)
Definition: plot_tools.cpp:509
void get_coord(int *Px, int *Py, int idx, int x, int y, int min_x, int min_y, int max_x, int max_y, int f_switch_x)
Definition: plot_tools.cpp:289
void draw_point_set_in_plane(std::string &fname, layered_graph_draw_options *O, geometry::projective_space *P, long int *Pts, int nb_pts, int f_point_labels, int verbose_level)
Definition: plot_tools.cpp:848
void draw_density_multiple_curves(layered_graph_draw_options *Draw_options, std::string &prefix, int **Data, int *Data_size, int nb_data_sets, int f_title, const char *title, int out_of, const char *label_x, int f_v_grid, int v_grid, int f_h_grid, int h_grid, int offset_x, int f_switch_x, int f_v_logarithmic, double log_base, int no, int f_embedded, int verbose_level)
Definition: plot_tools.cpp:150
void draw_mod_n(draw_mod_n_description *Descr, layered_graph_draw_options *O, int verbose_level)
Definition: plot_tools.cpp:425
void get_coord_log(int *Px, int *Py, int idx, int x, int y, int min_x, int min_y, int max_x, int max_y, double log_base, int f_switch_x)
Definition: plot_tools.cpp:299
void y_to_pt_on_curve(int y_in, int &x, int &y, int *outline_value, int *outline_number, int outline_sz)
Definition: plot_tools.cpp:313
void draw_density(layered_graph_draw_options *Draw_options, char *prefix, int *the_set, int set_size, int f_title, const char *title, int out_of, const char *label_x, int f_circle, int circle_at, int circle_rad, int f_mu, int f_sigma, int nb_standard_deviations, int f_v_grid, int v_grid, int f_h_grid, int h_grid, int offset_x, int f_switch_x, int no, int f_embedded, int verbose_level)
Definition: plot_tools.cpp:29
void union_end(std::ostream &ost, double scale_factor, double clipping_radius)
void rotate_111(int h, int nb_frames, std::ostream &fp)
void beginning(std::ostream &ost, double angle, double *sky, double *location, double *look_at, int f_with_background)
void animation_rotate_xyz(double angle_x_deg, double angle_y_deg, double angle_z_deg, std::ostream &ost)
void rotate_around_z_axis(int h, int nb_frames, std::ostream &fp)
void ini(std::ostream &ost, const char *fname_pov, int first_frame, int last_frame)
void animation_rotate_around_origin_and_given_vector(double *v, std::ostream &ost)
void union_end_no_clipping(std::ostream &ost, double scale_factor)
void union_end_box_clipping(std::ostream &ost, double scale_factor, double box_x, double box_y, double box_z)
void animation_rotate_around_origin_and_given_vector_by_a_given_angle(double *v, double angle_zero_one, std::ostream &ost)
int read_arguments(int argc, std::string *argv, int verbose_level)
a collection of 3D geometry objects
Definition: graphics.h:1152
int line_through_two_pts(double *x6, double rad)
Definition: scene.cpp:821
void draw_lines_cij(std::ostream &ost)
Definition: scene.cpp:1565
void draw_lines_cij_with_selection(int *selection, int nb_select, std::ostream &ost)
Definition: scene.cpp:1529
void clipping_by_cylinder(int line_idx, double r, std::ostream &ost)
Definition: scene2.cpp:315
int line_extended(double x1, double x2, double x3, double y1, double y2, double y3, double r)
Definition: scene.cpp:2438
void transform_quartics(scene *S, double *A4, double *A4_inv, int verbose_level)
Definition: scene.cpp:647
void draw_planes_with_selection(int *selection, int nb_select, std::string &options, std::ostream &ost)
Definition: scene.cpp:1851
void draw_points_with_selection(int *selection, int nb_select, double rad, std::string &options, std::ostream &ost)
Definition: scene.cpp:1910
void add_a_group_of_things(int *Idx, int sz, int verbose_level)
Definition: scene.cpp:4915
int point(double x1, double x2, double x3)
Definition: scene.cpp:967
void draw_plane(int idx, std::string &options, std::ostream &ost)
Definition: scene.cpp:1883
void create_Hilbert_cube(int verbose_level)
Definition: scene.cpp:4096
int read_scene_objects(int argc, std::string *argv, int i0, int verbose_level)
Definition: scene2.cpp:1177
void create_E4_surface(int N, int verbose_level)
Definition: scene.cpp:4566
int line_pt_and_dir_and_copy_points(double *x6, double rad, int verbose_level)
Definition: scene.cpp:776
void draw_quadric_with_selection(int *selection, int nb_select, std::string &options, std::ostream &ost)
Definition: scene.cpp:2092
void transform_quadrics(scene *S, double *A4, double *A4_inv, int verbose_level)
Definition: scene.cpp:589
int line_pt_and_dir(double *x6, double rad, int verbose_level)
Definition: scene.cpp:734
void rescale(int first_pt_idx, double rad_desired)
Definition: scene.cpp:2712
int cubic_Goursat_ABC(double A, double B, double C)
Definition: scene.cpp:1376
int line(double x1, double x2, double x3, double y1, double y2, double y3)
Definition: scene.cpp:871
int scan1(int argc, std::string *argv, int &i, int verbose_level)
Definition: scene2.cpp:339
void create_Eckardt_surface(int N, int verbose_level)
Definition: scene.cpp:4319
int point_center_of_mass_of_edge(int edge_idx)
Definition: scene.cpp:985
int point_as_intersection_of_two_lines(int line1, int line2)
Definition: scene.cpp:1017
std::vector< std::vector< int > > group_of_things
Definition: graphics.h:1217
void map_a_line(int line1, int line2, int plane_idx, int line_idx, double spread, int nb_pts, int *New_line_idx, int &nb_new_lines, int *New_pt_idx, int &nb_new_points, int verbose_level)
Definition: scene.cpp:2486
void create_affine_space(int q, int verbose_level)
Definition: scene.cpp:4258
int scan2(int argc, std::string *argv, int &i, int verbose_level)
Definition: scene2.cpp:797
int plane_through_three_points(int pt1, int pt2, int pt3)
Definition: scene.cpp:1107
void draw_lines_cij_with_offset(int offset, int number_of_lines, std::ostream &ost)
Definition: scene.cpp:1572
double label(int idx, std::string &txt)
Definition: scene.cpp:194
int triangle(int line1, int line2, int line3, int verbose_level)
Definition: scene.cpp:999
int face3(int pt1, int pt2, int pt3)
Definition: scene.cpp:1422
void points(double *Coords, int nb_points)
Definition: scene.cpp:958
void draw_lines_ai_with_selection(int *selection, int nb_select, std::ostream &ost)
Definition: scene.cpp:1583
void draw_lines_bj_with_selection(int *selection, int nb_select, std::ostream &ost)
Definition: scene.cpp:1637
void draw_lines_ai(std::ostream &ost)
Definition: scene.cpp:1619
void create_cube_and_tetrahedra(int verbose_level)
Definition: scene.cpp:4209
void create_Cayleys_nodal_cubic(int verbose_level)
Definition: scene.cpp:3991
void draw_octic_with_selection(int *selection, int nb_select, std::string &options, std::ostream &ost)
Definition: scene.cpp:2055
int point_center_of_mass_of_face(int face_idx)
Definition: scene.cpp:980
void copy_edges(scene *S, double *A4, double *A4_inv, int verbose_level)
Definition: scene.cpp:497
void draw_lines_bj_with_offset(int offset, std::ostream &ost)
Definition: scene.cpp:1680
void copy_faces(scene *S, double *A4, double *A4_inv, int verbose_level)
Definition: scene.cpp:711
int face5(int pt1, int pt2, int pt3, int pt4, int pt5)
Definition: scene.cpp:1443
int line_after_recentering(double x1, double x2, double x3, double y1, double y2, double y3, double rad)
Definition: scene.cpp:888
void transform_planes(scene *S, double *A4, double *A4_inv, int verbose_level)
Definition: scene.cpp:556
void draw_line_clipped_by_plane(int line_idx, int plane_idx, std::string &options, std::ostream &ost)
Definition: scene.cpp:2162
int intersect_line_and_line(int line1_idx, int line2_idx, double &lambda, int verbose_level)
Definition: scene.cpp:2408
int map_a_point(int line1, int line2, int plane_idx, double pt_in[3], int &new_line_idx, int &new_pt_idx, int verbose_level)
Definition: scene.cpp:2545
double quadric_coords(int idx, int j)
Definition: scene.cpp:269
void deformation_of_cubic_lex(int nb_frames, double angle_start, double angle_max, double angle_min, double *coeff1, double *coeff2, int verbose_level)
Definition: scene.cpp:1325
void transform_points(scene *S, double *A4, double *A4_inv, int verbose_level)
Definition: scene.cpp:519
void draw_quintic_with_selection(int *selection, int nb_select, std::string &options, std::ostream &ost)
Definition: scene.cpp:2018
int intersect_line_and_plane(int line_idx, int plane_idx, int &intersection_point_idx, int verbose_level)
Definition: scene.cpp:2209
int face4(int pt1, int pt2, int pt3, int pt4)
Definition: scene.cpp:1432
void draw_line_with_selection(int line_idx, std::string &options, std::ostream &ost)
Definition: scene.cpp:1494
void Dodecahedron_edges(int first_pt_idx)
Definition: scene.cpp:2931
std::vector< std::pair< int, std::string > > Labels
Definition: graphics.h:1191
void fourD_cube_edges(int first_pt_idx)
Definition: scene.cpp:2755
void draw_face(int idx, double thickness_half, std::string &options, std::ostream &ost)
Definition: scene.cpp:1754
void transform_quintics(scene *S, double *A4, double *A4_inv, int verbose_level)
Definition: scene.cpp:679
void create_twisted_cubic(int N, int verbose_level)
Definition: scene.cpp:4611
void read_obj_file(std::string &fname, int verbose_level)
Definition: scene.cpp:4757
std::vector< drawable_set_of_objects > Drawables
Definition: graphics.h:1221
double distance_euclidean_point_to_point(int pt1_idx, int pt2_idx)
Definition: scene.cpp:327
void create_triangulation_of_cube(int N, int verbose_level)
Definition: scene.cpp:4666
void draw_edges_with_selection(int *selection, int nb_select, std::string &options, std::ostream &ost)
Definition: scene.cpp:1694
void draw_quartic_with_selection(int *selection, int nb_select, std::string &options, std::ostream &ost)
Definition: scene.cpp:1981
double point_distance_from_origin(int pt_idx)
Definition: scene.cpp:318
void create_Hilbert_Cohn_Vossen_surface(int verbose_level)
Definition: scene.cpp:3458
int line_through_two_points(int pt1, int pt2, double rad)
Definition: scene.cpp:920
void draw_faces_with_selection(int *selection, int nb_select, double thickness_half, std::string &options, std::ostream &ost)
Definition: scene.cpp:1732
int point_center_of_mass(int *Pt_idx, int nb_pts)
Definition: scene.cpp:990
void transform_cubics(scene *S, double *A4, double *A4_inv, int verbose_level)
Definition: scene.cpp:618
int plane(double x1, double x2, double x3, double a)
Definition: scene.cpp:1073
scene * transformed_copy(double *A4, double *A4_inv, double rad, int verbose_level)
Definition: scene.cpp:369
void draw_cubic_with_selection(int *selection, int nb_select, std::string &options, std::ostream &ost)
Definition: scene.cpp:1944
int quadric_through_three_lines(int line_idx1, int line_idx2, int line_idx3, int verbose_level)
Definition: scene.cpp:1132
double distance_between_two_points(int pt1, int pt2)
Definition: scene.cpp:3370
void create_regulus(int idx, int nb_lines, int verbose_level)
Definition: scene2.cpp:25
void transform_lines(scene *S, double *A4, double *A4_inv, double rad, int verbose_level)
Definition: scene.cpp:441
void draw_lines_bj(std::ostream &ost)
Definition: scene.cpp:1673
void draw_quadric_clipped_by_plane(int quadric_idx, int plane_idx, std::string &options, std::ostream &ost)
Definition: scene.cpp:2123
void draw_lines_with_selection(int *selection, int nb_select, std::string &options, std::ostream &ost)
Definition: scene.cpp:1457
void Dodecahedron_planes(int first_pt_idx)
Definition: scene.cpp:2958
void create_Hilbert_model(int verbose_level)
Definition: scene.cpp:3503
double point_distance_euclidean(int pt_idx, double *y)
Definition: scene.cpp:309
void hypercube(int n, double rad_desired)
Definition: scene.cpp:2786
double euclidean_distance(int pt1, int pt2)
Definition: scene.cpp:2735
void create_Clebsch_surface(int verbose_level)
Definition: scene.cpp:3404
void draw_lines_ai_with_offset(int offset, std::ostream &ost)
Definition: scene.cpp:1626
void fourD_cube(double rad_desired)
Definition: scene.cpp:2670
int read_arguments(int argc, std::string *argv, int verbose_level)
void(* draw_vertex_callback)(tree *T, mp_graphics *G, int *v, int layer, tree_node *N, int x, int y, int dx, int dy)
Definition: graphics.h:1524
part of the data structure tree
Definition: graphics.h:1547
void draw_edges(mp_graphics &G, tree_draw_options *Tree_draw_options, layered_graph_draw_options *Opt, int f_has_parent, int parent_x, int parent_y, int max_depth, tree *T, int verbose_level)
Definition: tree_node.cpp:363
void draw_sideways(mp_graphics &G, int f_circletext, int f_i, int f_has_parent, int parent_x, int parent_y, int max_depth, int f_edge_labels)
Definition: tree_node.cpp:619
void get_values(int *v, int verbose_level)
Definition: tree_node.cpp:346
int find_node(int &DFS_rk, int *path, int sz, int verbose_level)
Definition: tree_node.cpp:123
void place_xy(int left, int right, int ymax, int max_depth)
Definition: tree_node.cpp:224
int calc_y_coordinate(int ymax, int l, int max_depth)
Definition: tree_node.cpp:701
void place_on_circle(int xmax, int ymax, int max_depth)
Definition: tree_node.cpp:246
void get_coordinates_and_width(int &idx, int *coord_xyw)
Definition: tree_node.cpp:200
void draw_vertices(mp_graphics &G, tree_draw_options *Tree_draw_options, layered_graph_draw_options *Opt, int f_has_parent, int parent_x, int parent_y, int max_depth, tree *T, int verbose_level)
Definition: tree_node.cpp:460
void add_node(int l, int depth, int *path, int color, std::string &label, int verbose_level)
Definition: tree_node.cpp:270
int find_node_and_path(std::vector< int > &Rk, int *path, int sz, int verbose_level)
Definition: tree_node.cpp:155
void init(int depth, tree_node *parent, int f_value, int value, int f_has_color, int color, std::string &label, int verbose_level)
Definition: tree_node.cpp:51
void get_coordinates(int &idx, int *coord_xy)
Definition: tree_node.cpp:188
void circle_center_and_radii(int xmax, int ymax, int max_depth, int &x0, int &y0, int *&rad)
Definition: tree.cpp:420
void compute_DFS_ranks(int &nb_nodes, int verbose_level)
Definition: tree.cpp:440
void draw(std::string &fname, graphics::tree_draw_options *Tree_draw_options, layered_graph_draw_options *Opt, int verbose_level)
Definition: tree.cpp:224
void draw_preprocess(std::string &fname, graphics::tree_draw_options *Tree_draw_options, layered_graph_draw_options *Opt, int verbose_level)
Definition: tree.cpp:358
void init(graphics::tree_draw_options *Tree_draw_options, int xmax, int ymax, int verbose_level)
Definition: tree.cpp:39
int read_arguments(int argc, std::string *argv, int verbose_level)
the orbiter library for the classification of combinatorial objects
a class to help with drawing elements in a 2D grid fashion
Definition: graphics.h:531