18namespace layer1_foundations {
47 int f_v = (verbose_level >= 1);
50 cout <<
"animate::init" << endl;
53 cout <<
"animate::init S == NULL" << endl;
67 cout <<
"animate::init done" << endl;
76 int f_v = (verbose_level >= 1);
79 int f_has_camera =
FALSE;
81 double camera_location[3];
82 double camera_look_at[3];
83 int f_has_zoom =
FALSE;
86 double zoom_clipping_start = 0.;
87 double zoom_clipping_end = 0.;
88 int f_has_zoom_sequence =
FALSE;
89 double *zoom_sequence = NULL;
90 int zoom_sequence_length = 0;
91 double *zoom_sequence_value = NULL;
92 int *zoom_sequence_fst = NULL;
93 int *zoom_sequence_len = NULL;
94 int zoom_sequence_l = 0;
96 double clipping_radius = 0;
97 double zoom_increment = 0;
98 double zoom_clipping_increment = 0;
99 int nb_frames_this_round = 0;
100 int f_has_pan =
FALSE;
101 int pan_f_reverse =
FALSE;
104 double pan_center[3];
109 double pan_normal_uv[3];
115 double pan_alpha = 0, pan_delta = 0;
118 cout <<
"animate::animate_one_round" << endl;
119 cout <<
"nb_frames=" <<
nb_frames << endl;
125 for (j = 0; j < 3; j++) {
144 zoom_increment = (double)(zoom_end - zoom_start) /
145 (double) nb_frames_this_round;
146 zoom_clipping_increment = (double)(zoom_clipping_end - zoom_clipping_start) /
147 (double) nb_frames_this_round;
152 f_has_zoom_sequence =
TRUE;
154 zoom_sequence, zoom_sequence_length);
155 cout <<
"round " << round <<
" : zoom_sequence ";
156 N.
vec_print(cout, zoom_sequence, zoom_sequence_length);
158 if (
EVEN(zoom_sequence_length)) {
159 cout <<
"zoom_sequence mast have odd length" << endl;
162 zoom_sequence_value =
new double[zoom_sequence_length];
163 zoom_sequence_fst =
NEW_int(zoom_sequence_length);
164 zoom_sequence_len =
NEW_int(zoom_sequence_length);
165 zoom_sequence_l = zoom_sequence_length >> 1;
166 zoom_sequence_fst[0] = 0;
167 for (j = 0; j <= zoom_sequence_l; j++) {
168 zoom_sequence_value[j] = zoom_sequence[2 * j];
169 if (j < zoom_sequence_l) {
170 zoom_sequence_fst[j + 1] =
171 zoom_sequence_fst[j] +
172 (int) zoom_sequence[2 * j + 1];
173 zoom_sequence_len[j] =
174 zoom_sequence_fst[j + 1] -
175 zoom_sequence_fst[j];
178 cout <<
"zoom sequence: " << endl;
179 for (j = 0; j < zoom_sequence_l; j++) {
180 cout << zoom_sequence_fst[j] <<
" - "
181 << zoom_sequence_len[j] <<
" : "
182 << zoom_sequence_value[j] << endl;
184 cout << zoom_sequence_fst[zoom_sequence_l] << endl;
201 cout <<
"pan_from: ";
207 cout <<
"pan_center: ";
212 pan_u[0] = pan_from[0] - pan_center[0];
213 pan_u[1] = pan_from[1] - pan_center[1];
214 pan_u[2] = pan_from[2] - pan_center[2];
215 pan_v[0] = pan_to[0] - pan_center[0];
216 pan_v[1] = pan_to[1] - pan_center[1];
217 pan_v[2] = pan_to[2] - pan_center[2];
229 if (
ABS(vv) < 0.01) {
230 cout <<
"animate vector v is too short" << endl;
234 -1 * uv / vv, pan_v, pan_w, 3);
247 cout <<
"pan_u (normalized): ";
250 cout <<
"pan_v (normalized): ";
258 pan_alpha = acos(uv );
259 cout <<
"pan_alpha=" << pan_alpha <<
" = "
260 << pan_alpha * 180. /
M_PI <<
" deg" << endl;
261 pan_delta = pan_alpha / (double) (nb_frames_this_round - 1);
262 cout <<
"pan_delta=" << pan_delta <<
" = "
263 << pan_delta * 180. /
M_PI <<
" deg" << endl;
275 cout <<
"wv=" << wv << endl;
276 if (
ABS(wv) > 0.01) {
277 cout <<
"error w is not orthogonal to v" << endl;
293 int f_with_background =
TRUE;
296 f_with_background =
FALSE;
301 for (h = 0; h < nb_frames_this_round; h++) {
303 char fname_pov[1000];
304 char fname_png[1000];
305 char povray_opts[1000];
311 sprintf(povray_opts + strlen(povray_opts),
"-W%d ",
Opt->
W);
314 sprintf(povray_opts + strlen(povray_opts),
"-H%d ",
Opt->
H);
322 cout <<
"round " << round <<
", frame " << h <<
" / "
323 << nb_frames_this_round <<
" in " << fname_pov << endl;
324 *
fpm <<
"\t/usr/local/povray/bin/povray " << povray_opts
325 <<
" " << fname_pov << endl;
328 ofstream fp(fname_pov);
335 clipping_radius = 2.7;
344 angle = ((double)zoom_start + (
double) h * zoom_increment);
345 clipping_radius = zoom_clipping_start + (double) h * zoom_clipping_increment;
348 if (f_has_zoom_sequence) {
350 for (j = 0; j < zoom_sequence_l; j++) {
351 if (h >= zoom_sequence_fst[j] &&
352 h < zoom_sequence_fst[j] + zoom_sequence_len[j]) {
353 angle = zoom_sequence_value[j] +
354 (h - zoom_sequence_fst[j]) *
355 (zoom_sequence_value[j + 1] - zoom_sequence_value[j])
356 / zoom_sequence_len[j];
360 if (j == zoom_sequence_l) {
361 cout <<
"cound not find frame " << h <<
" in zoom sequence" << endl;
364 if (zoom_sequence_fst[zoom_sequence_l] != nb_frames_this_round) {
365 cout <<
"zoom_sequence the frames dont add up" << endl;
366 cout <<
"have=" << zoom_sequence_fst[zoom_sequence_l] << endl;
367 cout <<
"should have " << nb_frames_this_round << endl;
376 cout <<
"frame " << h <<
" / " << nb_frames_this_round
377 <<
", angle " << angle << endl;
383 double direction_of_view[3];
390 beta = pan_alpha - pan_delta *
391 (double) (nb_frames_this_round - 1 - h);
394 beta = pan_alpha - pan_delta * (double) h;
396 cout <<
"h=" << h <<
" / " << nb_frames_this_round
397 <<
" beta=" << beta << endl;
400 cos(beta) * suu, pan_v,
401 sin(beta) * szz, pan_z,
412 cos(beta) * suu, pan_v,
413 sin(beta) * szz, pan_z,
426 direction_of_view, 3);
470 cout <<
"draw_frame_callback == NULL" << endl;
473 (*draw_frame_callback)(
this, h ,
474 nb_frames_this_round, round,
484 int f_has_bottom_plane =
TRUE;
487 f_has_bottom_plane =
FALSE;
491 if (f_has_bottom_plane) {
498 cout <<
"Written file " << fname_pov <<
" of size "
512 snprintf(cmd, 5000,
"composite \\( %s "
513 "-resize %lf%% \\) %s %s tmp.png",
520 *
fpm <<
"\t" << cmd << endl;
522 sprintf(cmd,
"mv tmp.png %s", fname_png);
525 *
fpm <<
"\t" << cmd << endl;
534 if ((
int) strlen(str) > h) {
543 int stroke_width = 1;
554 snprintf(cmd, 10000,
"convert -background none -fill white "
555 "-stroke black -strokewidth %d -font "
556 "Courier-10-Pitch-Bold -pointsize %d "
557 "label:'%s' overlay.png",
558 stroke_width, font_size, str);
561 *
fpm <<
"\t" << cmd << endl;
564 snprintf(cmd, 10000,
"composite -gravity center overlay.png "
565 " %s tmp.png", fname_png);
568 *
fpm <<
"\t" << cmd << endl;
570 snprintf(cmd, 10000,
"mv tmp.png %s", fname_png);
573 *
fpm <<
"\t" << cmd << endl;
590 int stroke_width = 1;
598 snprintf(str, 1000,
"convert -background none -fill white "
599 "-stroke black -strokewidth %d -font "
600 "Courier-10-Pitch-Bold -pointsize %d "
601 "label:'%s' overlay.png",
602 stroke_width, font_size, label.c_str());
606 *
fpm <<
"\t" << cmd << endl;
609 snprintf(str, 1000,
"composite %s overlay.png %s tmp.png",
614 *
fpm <<
"\t" << cmd << endl;
616 snprintf(str, 10000,
"mv tmp.png %s", fname_png);
620 *
fpm <<
"\t" << cmd << endl;
631 && h < Opt->latex_label_start[i] +
641 cout <<
"creating latex label " << i << endl;
647 sprintf(str,
"_%04d", i);
653 cout <<
"latex_fname_base=" <<
660 fname_tex.append(
".tex");
662 fname_pdf.append(
".pdf");
666 cout <<
"begin latex source:" << endl;
668 cout <<
"end latex source" << endl;
670 ofstream fp(fname_tex);
681 cmd.assign(
"pdflatex ");
682 cmd.append(fname_tex);
695 string fname_label_png;
698 fname_pdf.append(
".pdf");
699 fname_label_png.assign(
"label.png");
701 cmd.assign(
"convert -trim ");
702 cmd.append(fname_pdf);
704 cmd.append(fname_label_png);
707 *
fpm <<
"\t" << cmd << endl;
710 cmd.assign(
"composite ");
713 cmd.append(fname_label_png);
715 cmd.append(fname_png);
716 cmd.append(
" tmp.png");
719 *
fpm <<
"\t" << cmd << endl;
721 cmd.assign(
"mv tmp.png ");
722 cmd.append(fname_png);
725 *
fpm <<
"\t" << cmd << endl;
774 std::string &options, ostream &fp)
802 int s[] = {12, 13, 14, 15, 16, 17};
808 int s[] = {18, 19, 20, 21, 22, 23};
814 int s[] = {12, 13, 14, 15, 16, 17};
820 int s[] = {18, 19, 20, 21, 22, 23};
826 int s[] = {30,31,32,33,34,35,36,37,38,39,40,41};
835 int s[] = {0,1,2,3,4,5};
841 int s[] = {0,1,2,3,4,5,6,7,8,9,10,11};
850 int s[] = {24,25,26,27,28,29};
864 int h,
int nb_frames,
int round,
865 double clipping_radius,
917 cout <<
"draw_frame_Hilbert round=" << round << endl;
949 int s[] = { 19, 20, 21 };
959 int s[] = { 19, 20, 21 };
970 int s[] = { 19, 20, 21, 22 };
981 int s[] = { 19, 20, 21, 22 };
992 int s[] = { 19, 20, 21, 22 };
1000 if (round == 9 || round == 11 || round == 12) {
1036 int s[] = { 19, 20, 21, 22, 23};
1073 int nb_frames_half, nb1, j;
1076 nb1 = nb_frames_half / 6;
1078 if (h < nb_frames_half) {
1097 int nb_frames_half, nb1, j;
1100 nb1 = nb_frames_half / 6;
1102 if (h < nb_frames_half) {
1132 int nb_frames_half, nb1, j;
1135 nb1 = nb_frames_half / 6;
1137 if (h < nb_frames_half) {
1172 for (i = 0; i < 15; i++) {
1173 if (i == 2 || i == 7 || i == 11) {
1182 for (i = 0; i < 15; i++) {
1183 if (i == 2 || i == 7 || i == 11) {
1192 for (i = 0; i < 15; i++) {
1193 if (i == 2 || i == 7 || i == 11) {
1277 int red[6] = {12 + 21,12 + 22,12 + 23,12 + 24,12 + 25,12 + 26};
1279 int blue[6] = {12 + 27,12 + 28,12 + 29,12 + 30,12 + 31,12 + 32};
1281 int yellow[15] = {12 + 33,12 + 34,12 + 35,12 + 36,12 + 37,
1282 12 + 38,12 + 39,12 + 40,12 + 41,12 + 42,12 + 43,
1283 12 + 44,12 + 45,12 + 46,12 + 47};
1291 int red[3] = {60,61,62};
1305 int nb_lines_actual = 15;
1308 idx =
NEW_int(nb_lines_actual);
1309 for (i = 0; i < nb_lines_actual; i++) {
1310 idx[i] = nb_lines0 + i;
1314 int nb_frames_half, nb1, nb2;
1317 nb1 = nb_frames_half / nb_lines_actual + 1;
1319 if (h < nb1 * nb_lines_actual) {
1334 int nb_lines_actual = 15;
1337 idx =
NEW_int(nb_lines_actual);
1338 for (i = 0; i < nb_lines_actual; i++) {
1339 idx[i] = nb_lines0 + i;
1349 int nb_lines_actual = 15;
1352 idx =
NEW_int(nb_lines_actual);
1353 for (i = 0; i < nb_lines_actual; i++) {
1354 idx[i] = nb_lines0 + i;
1366 int nb_lines_actual = 15;
1369 idx =
NEW_int(nb_lines_actual);
1370 for (i = 0; i < nb_lines_actual; i++) {
1371 idx[i] = nb_lines0 + i;
1386 int nb_lines_actual = 15;
1387 int nb_lines1 = nb_lines0 + nb_lines_actual;
1390 idx =
NEW_int(nb_lines_actual);
1391 for (i = 0; i < nb_lines_actual; i++) {
1392 idx[i] = nb_lines0 + i;
1405 int nb_lines_actual = 15;
1406 int nb_lines1 = nb_lines0 + nb_lines_actual;
1409 idx =
NEW_int(nb_lines_actual);
1410 for (i = 0; i < nb_lines_actual; i++) {
1411 idx[i] = nb_lines0 + i;
1535 int s[] = {12, 13 };
1539 int s[] = { 21, 22 };
1560 int s[] = {12, 13 };
1564 int s[] = { 21, 22 };
1581 int s[] = {12, 13 };
1585 int s[] = { 21, 22 };
1602 int s[] = {12, 13 };
1606 int s[] = { 21, 22 };
1631 for (i = 0; i < 15; i++) {
1632 if (i == 2 || i == 7 || i == 11) {
1731 clebsch_scene *CS = (clebsch_scene *)
S->
extra_data;
1737 nb = CS->original_element_idx[n - 1];
1779 clebsch_scene *CS = (clebsch_scene *)
S->
extra_data;
1782 nb = CS->nb_elements;
1784 CS->draw_points_down_original(0, CS->nb_steps, 0.05,
Pov->
color_scarlet, fp);
1797 int orbit_reps[] = {
1812 for (i = 0; i < 13 * 3; i++) {
1821 int *cur_orbit_rep = orbit_reps + 2 * 3;
1826 for (i = 0; i < 3; i++) {
1828 set[1] = cur_orbit_rep[i];
1829 set[2] = cur_orbit_rep[(i + 1) % 3];
1832 faces[1 + i] = 10 + rk;
1873 int start_of_long_lines = 79;
1923 int nb_select = q * q * q;
1926 cout <<
"scene does not have affine space" << endl;
1929 selection =
NEW_int(nb_select);
1930 for (i = 0; i < nb_select; i++) {
1950 int s[] = {42,43,44};
1972 int s[] = {42,43,44};
2001 int selection[] = {0,1};
2006 int selection[] = {0,1};
2011 int selection[] = {0};
2034 cout <<
"animate::draw_frame_Hilbert done" << endl;
2266 int nb_affine_pts = 222;
2269 int nb_select = nb_affine_pts;
2275 cout <<
"draw_surface_13_1 "
2276 "scene does not have affine space" << endl;
2280 selection =
NEW_int(nb_select);
2281 for (i = 0; i < nb_select; i++) {
2282 v[0] = Pts[i * 4 + 2];
2283 v[1] = Pts[i * 4 + 1];
2284 v[2] = Pts[i * 4 + 0];
2297 int h,
int nb_frames,
int round,
2327 double thickness_half = 0.15;
2328 double extra_spacing = 0;
2329 string color_options(
"pigment { Black } ");
2341 for (i = 0; i < 3; i++) {
2349 for (i = 0; i < 3; i++) {
2350 view[i] = look_at[i] - location[i];
2354 double scale = 0.25;
2355 double off_x = -0.1;
2356 double off_y = 0.25;
2357 double off_z = -0.1;
2367 draw_text(one, thickness_half, extra_spacing,
2369 off_x, off_y, off_z,
2374 fp, verbose_level - 1);
2376 draw_text(two, thickness_half, extra_spacing,
2378 off_x, off_y, off_z,
2383 fp, verbose_level - 1);
2385 draw_text(three, thickness_half, extra_spacing,
2387 off_x, off_y, off_z,
2392 fp, verbose_level - 1);
2394 draw_text(four, thickness_half, extra_spacing,
2396 off_x, off_y, off_z,
2401 fp, verbose_level - 1);
2403 draw_text(five, thickness_half, extra_spacing,
2405 off_x, off_y, off_z,
2410 fp, verbose_level - 1);
2412 draw_text(six, thickness_half, extra_spacing,
2414 off_x, off_y, off_z,
2419 fp, verbose_level - 1);
2424 int h,
int nb_frames,
int round,
2425 double clipping_radius,
2433 cout <<
"animate::draw_frame_Eckardt_surface" << endl;
2435 double scale_factor;
2452 else if (round == 1) {
2465 else if (round == 2) {
2478 else if (round == 3) {
2501 else if (round == 4 || round == 5 || round == 6) {
2517 for (i = 0; i < 27; i++) {
2533 else if (round == 7) {
2547 for (i = 0; i < 27; i++) {
2570 else if (round == 8) {
2588 for (i = 0; i < 27; i++) {
2613 int h,
int nb_frames,
int round,
2614 double clipping_radius,
2618 cout <<
"animate::draw_frame_E4_surface" << endl;
2636 else if (round == 1) {
2657 int h,
int nb_frames,
int round,
2658 double clipping_radius,
2679 else if (round == 1) {
2687 int s[] = {6,7,8,9};
2692 int s[] = {12,13,14,15,16,17};
2710 int h,
int nb_frames,
int round,
2711 double clipping_radius,
2717 cout <<
"draw_frame_twisted_cubic" << endl;
2742 int s[] = {0,1,2,3,4,5,6,7,8,9,10,11};
2751 for (i = 1; i < h; i++) {
2752 s[i - 1] = 12 + i - 1;
2761 else if (round == 1) {
2769 int s[] = {0,1,2,3,4,5,6,7,8,9,10,11};
2779 s[i - 1] = 12 + i - 1;
2799 int h,
int nb_frames,
int round,
2800 double clipping_radius,
2865 int h,
int nb_frames,
int round,
2866 double clipping_radius,
2872 double d_theta, theta, r, x, y;
2873 double b1[3] = {2/sqrt(6),-1/sqrt(6),-1/sqrt(6)};
2874 double b2[3] = {0,1/sqrt(2),-1/sqrt(2)};
2881 theta = (double) h * d_theta;
2883 r = 1. + 2. * cos(theta);
2893 for (i = 0; i < 3; i++) {
2894 u[i] = x * b1[i] + y * b2[i];
2913 cout <<
"varphi=" << endl;
2915 cout <<
"u=" << endl;
2918 double lambda = 0.2;
2926 cout <<
"A=" << endl;
2928 cout <<
"Av=" << endl;
2935 cout <<
"Original scene:" << endl;
2937 cout <<
"Transformed scene:" << endl;
2987 int h,
int nb_frames,
int round,
2999 double angle_zero_one = 1. - (h * 1. / (double)
nb_frames);
3009 v, angle_zero_one, fp);
3019 int h,
int nb_frames,
int round,
3020 double clipping_radius,
3038 clipping_radius, clipping_radius, clipping_radius);
3044 cout <<
"animate::union_end boundary_type unrecognized" << endl;
3050 double thickness_half,
double extra_spacing,
3052 double off_x,
double off_y,
double off_z,
3053 std::string &color_options,
3058 ostream &ost,
int verbose_level)
3060 int f_v = (verbose_level >= 1);
3077 cout <<
"animate::draw_text" << endl;
3085 cout <<
"x,y,z=" << x <<
", " << y <<
" , " << z << endl;
3088 for (i = 0; i < 3; i++) {
3091 for (i = 0; i < 3; i++) {
3097 cout <<
"view_x,view_y,view_z=" << view[0] <<
", "
3098 << view[1] <<
" , " << view[2] << endl;
3101 cout <<
"up_x,up_y,up_z=" << up[0] <<
", " << up[1]
3102 <<
" , " << up[2] << endl;
3104 u[0] = view[1] * up[2] - view[2] * up[1];
3105 u[1] = -1 *(view[0] * up[2] - up[0] * view[2]);
3106 u[2] = view[0] * up[1] - up[0] * view[1];
3108 cout <<
"u=" << u[0] <<
", " << u[1] <<
" , " << u[2] << endl;
3138 cout <<
"up normalized: ";
3141 cout <<
"u normalized: ";
3144 cout <<
"view normalized: ";
3149 offset[0] = off_x * u[0] + off_y * up[0] + off_z * view[0];
3150 offset[1] = off_x * u[1] + off_y * up[1] + off_z * view[1];
3151 offset[2] = off_x * u[2] + off_y * up[2] + off_z * view[2];
3159 ost <<
"\ttext {" << endl;
3160 ost <<
"\t\tttf \"timrom.ttf\", \"" << text <<
"\", "
3161 << thickness_half <<
", " << extra_spacing <<
" ";
3162 ost << color_options << endl;
3163 ost <<
"\t\tscale " << scale << endl;
3164 ost <<
"\t\trotate<0,180,0>" << endl;
3165 ost <<
"\t\trotate<90,0,0>" << endl;
3166 ost <<
"\t\trotate<";
3168 ost <<
",0,0>" << endl;
3169 ost <<
"\t\trotate<0, ";
3171 ost <<
",0>" << endl;
3172 ost <<
"\t\trotate<0,0, ";
3175 ost <<
"\t\ttranslate<";
3182 ost <<
"\t}" << endl;
3187 cout <<
"animate::draw_text done" << endl;
3192 double thickness_half,
double extra_spacing,
3194 double off_x,
double off_y,
double off_z,
3195 std::string &options, std::string &group_options,
3196 ostream &ost,
int verbose_level)
3206 for (i = 0; i < nb_select; i++) {
3212 idx_point =
S->
Labels[s].first;
3217 thickness_half, extra_spacing,
3219 off_x, off_y, off_z,
3222 ost, verbose_level);
a collection of combinatorial functions
int rank_k_subset(int *set, int n, int k)
a collection of functions related to sorted vectors
void int_vec_heapsort(int *v, int len)
various functions related to geometries
long int AG_element_rank(int q, int *v, int stride, int len)
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)
void draw_single_surface_with_color(int surface_idx, std::string &color, std::ostream &fp)
void draw_Hilbert_red_lines(std::ostream &fp)
void draw_single_quadric(int idx, std::string &color, std::ostream &fp)
char fname_makefile[1000]
void draw_frame_Hilbert_round_76(video_draw_options *Opt, int h, int nb_frames, int round, std::ostream &fp, int verbose_level)
void draw_Hilbert_cube_boxed(std::ostream &fp)
povray_job_description * Povray_job_description
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)
void draw_frame_five_plus_one(int h, int nb_frames, int round, double clipping_radius, std::ostream &fp, int verbose_level)
void draw_surface_13_1(std::ostream &fp)
void union_end(int h, int nb_frames, int round, double clipping_radius, std::ostream &fp)
void init(povray_job_description *Povray_job_description, void *extra_data, int verbose_level)
void draw_Hilbert_red_line(int idx_one_based, std::ostream &fp)
void draw_Hilbert_blue_line(int idx_one_based, std::ostream &fp)
void draw_single_surface(int surface_idx, std::ostream &fp)
void draw_frame_Eckardt_surface(int h, int nb_frames, int round, double clipping_radius, std::ostream &fp, int verbose_level)
void draw_Hilbert_line(int line_idx, std::string &color, std::ostream &fp)
void draw_frame_twisted_cubic(int h, int nb_frames, int round, double clipping_radius, std::ostream &fp, int verbose_level)
void draw_Hilbert_tetrahedron_faces(std::ostream &fp)
void draw_frame_triangulation_of_cube(int h, int nb_frames, int round, double clipping_radius, std::ostream &fp, int verbose_level)
void draw_frame_windy(int h, int nb_frames, int round, double clipping_radius, std::ostream &fp, int verbose_level)
void(* draw_frame_callback)(animate *A, int frame, int nb_frames_this_round, int round, double clipping, std::ostream &fp, int verbose_level)
void draw_Hilbert_tetrahedron_boxed(std::ostream &fp)
void draw_Hilbert_cube_extended_edges(std::ostream &fp)
void draw_Hilbert_plane(int plane_idx, std::string &color, std::ostream &fp)
void draw_Hilbert_cube_faces(std::ostream &fp)
void draw_Hilbert_blue_lines(std::ostream &fp)
void draw_Hilbert_point(int point_idx, double rad, std::string &options, std::ostream &fp)
void draw_frame_Hilbert(int h, int nb_frames, int round, double clipping_radius, std::ostream &fp, int verbose_level)
void draw_single_line(int line_idx, std::string &color, std::ostream &fp)
void animate_one_round(int round, int verbose_level)
void rotation(int h, int nb_frames, int round, std::ostream &fp)
void draw_frame_E4_surface(int h, int nb_frames, int round, double clipping_radius, std::ostream &fp, int verbose_level)
povray interface for 3D graphics
void union_end(std::ostream &ost, double scale_factor, double clipping_radius)
void rotate_111(int h, int nb_frames, std::ostream &fp)
std::string color_orange_transparent
void beginning(std::ostream &ost, double angle, double *sky, double *location, double *look_at, int f_with_background)
std::string color_orange_no_phong
void bottom_plane(std::ostream &ost)
std::string color_yellow_lemon_transparent
void rotate_around_z_axis(int h, int nb_frames, std::ostream &fp)
void union_start(std::ostream &ost)
std::string color_scarlet
std::string color_pink_transparent
void union_end_no_clipping(std::ostream &ost, double scale_factor)
std::string color_white_very_transparent
std::string color_yellow_transparent
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)
description of a povray job
video_draw_options * Video_draw_options
a collection of 3D geometry objects
void draw_lines_cij_with_selection(int *selection, int nb_select, std::ostream &ost)
void draw_planes_with_selection(int *selection, int nb_select, std::string &options, std::ostream &ost)
void draw_points_with_selection(int *selection, int nb_select, double rad, std::string &options, std::ostream &ost)
void draw_quadric_with_selection(int *selection, int nb_select, std::string &options, std::ostream &ost)
void draw_lines_ai_with_selection(int *selection, int nb_select, std::ostream &ost)
void draw_lines_bj_with_selection(int *selection, int nb_select, std::ostream &ost)
int affine_space_starting_point
int intersect_line_and_plane(int line_idx, int plane_idx, int &intersection_point_idx, int verbose_level)
void draw_line_with_selection(int line_idx, std::string &options, std::ostream &ost)
std::vector< std::pair< int, std::string > > Labels
double point_coords(int idx, int j)
void draw_edges_with_selection(int *selection, int nb_select, std::string &options, std::ostream &ost)
void draw_faces_with_selection(int *selection, int nb_select, double thickness_half, std::string &options, std::ostream &ost)
scene * transformed_copy(double *A4, double *A4_inv, double rad, int verbose_level)
void draw_cubic_with_selection(int *selection, int nb_select, std::string &options, std::ostream &ost)
void draw_lines_with_selection(int *selection, int nb_select, std::string &options, std::ostream &ost)
double plane_coords(int idx, int j)
options for povray videos
int latex_label_start[1000]
double zoom_clipping_start[1000]
int no_background_round[1000]
std::string round_text_text[1000]
int latex_label_sustain[1000]
double zoom_clipping_end[1000]
int round_text_sustain[1000]
int latex_f_label_has_been_prepared[1000]
std::string zoom_sequence_text[1000]
double camera_look_at[1000 *3]
int latex_label_round[1000]
double global_picture_scale
double picture_scale[1000]
std::string label_gravity[1000]
std::string latex_label_text[1000]
double camera_sky[1000 *3]
std::string latex_label_gravity[1000]
int nb_frames_value[1000]
double clipping_value[1000]
std::string latex_fname_base[1000]
int f_has_global_picture_scale
std::string picture_fname[1000]
double camera_location[1000 *3]
int zoom_sequence_round[1000]
int nb_frames_round[1000]
int round_text_round[1000]
double rotation_axis_custom[3]
std::string latex_extras_for_praeamble[1000]
double pan_center[1000 *3]
int no_bottom_plane_round[1000]
std::string label_text[1000]
std::string picture_options[1000]
numerical functions, mostly concerned with double
int triangular_prism(double *P1, double *P2, double *P3, double *abc3, double *angles3, double *T3, int verbose_level)
void vec_linear_combination3(double c1, double *v1, double c2, double *v2, double c3, double *v3, double *w, int len)
void vec_scalar_multiple(double *a, double lambda, int len)
void vec_linear_combination1(double c1, double *v1, double *w, int len)
void print_system(double *A, int m, int n)
void vec_linear_combination(double c1, double *v1, double c2, double *v2, double *v3, int len)
void vec_print(double *a, int len)
void vec_scan(const char *s, double *&v, int &len)
void make_unit_vector(double *v, int len)
void cross_product(double *u, double *v, double *n)
void output_double(double a, std::ostream &ost)
void make_transform_t_varphi_u_double(int n, double *varphi, double *u, double *A, double *Av, int verbose_level)
double rad2deg(double phi)
double dot_product(double *u, double *v, int len)
a collection of functions related to file io
long int file_size(std::string &fname)
interface to create latex output files
void head_easy_with_extras_in_the_praeamble(std::ostream &ost, const char *extras)
void foot(std::ostream &ost)
to temporarily override a double variable with a new value
#define Int_vec_print(A, B, C)
the orbiter library for the classification of combinatorial objects