21namespace layer1_foundations {
27 int f_v = (verbose_level >= 1);
33 cout <<
"scene::create_regulus" << endl;
72 int axis_of_symmetry_idx;
97 cout <<
"scene::create_regulus coeff=" << endl;
109 A[1] = A[3] = axy * 0.5;
110 A[2] = A[6] = axz * 0.5;
111 A[5] = A[7] = ayz * 0.5;
118 cout <<
"scene::create_regulus A=" << endl;
120 cout <<
"scene::create_regulus a=" << endl;
126 cout <<
"scene::create_regulus" << endl;
130 3, lambda, verbose_level - 2);
133 cout <<
"scene::create_regulus Basis=" << endl;
143 cout <<
"scene::create_regulus diagonalized matrix is" << endl;
147 for (i = 0; i < 3; i++) {
148 for (j = 0; j < 3; j++) {
152 if (
ABS(C[i * 3 + i]) > 0.0001) {
153 D[i * 3 + i] = 1. / C[i * 3 + i];
156 cout <<
"Warning zero eigenvalue" << endl;
163 cout <<
"scene::create_regulus D=" << endl;
171 for (i = 0; i < 3; i++) {
177 cout <<
"scene::create_regulus c=" << endl;
189 c1 = vec_e[0] - vec_f[0] + a1;
193 cout <<
"scene::create_regulus e=" << vec_e[0] << endl;
194 cout <<
"scene::create_regulus f=" << vec_f[0] << endl;
195 cout <<
"scene::create_regulus a1=" << a1 << endl;
196 cout <<
"scene::create_regulus c1=" << c1 << endl;
199 coeff[0] = C[0 * 3 + 0];
203 coeff[4] = C[1 * 3 + 1];
206 coeff[7] = C[2 * 3 + 2];
211 cout <<
"scene::create_regulus coeff=" << endl;
235 -1, vec_c, z6 + 3, 3);
247 x6[3] = sqrt(-lambda[2]);
249 x6[5] = sqrt(lambda[0]);
252 x6[3] = sqrt(lambda[2]);
254 x6[5] = sqrt(-lambda[0]);
267 -1, vec_c, z6 + 3, 3);
282 Num.
make_Rz(R, (
double) k * phi);
294 -1, vec_c, z6 + 3, 3);
301 cout <<
"adding group for axis of symmetry:" << endl;
304 cout <<
"adding group for lines of the regulus:" << endl;
311 cout <<
"scene::create_regulus done" << endl;
320 ost <<
" clipped_by { cylinder{<";
321 for (h = 0; h < 3; h++) {
328 for (h = 0; h < 3; h++) {
334 ost <<
">, " << r <<
" } } // line " << line_idx << endl;
335 ost <<
" bounded_by { clipped_by }" << endl;
339int scene::scan1(
int argc, std::string *argv,
int &i,
int verbose_level)
344 if (ST.
stringcmp(argv[i],
"-cubic_lex") == 0) {
345 cout <<
"-cubic_lex" << endl;
351 coeff_text.assign(argv[++i]);
352 Numerics.
vec_scan(coeff_text, coeff, coeff_sz);
353 if (coeff_sz != 20) {
354 cout <<
"For -cubic_lex, number of coefficients must be 20; is " << coeff_sz << endl;
360 else if (ST.
stringcmp(argv[i],
"-cubic_orbiter") == 0) {
361 cout <<
"-cubic_orbiter" << endl;
367 coeff_text.assign(argv[++i]);
368 Numerics.
vec_scan(coeff_text, coeff, coeff_sz);
369 if (coeff_sz != 20) {
370 cout <<
"For -cubic_orbiter, the number of coefficients must be 20; is " << coeff_sz << endl;
376 else if (ST.
stringcmp(argv[i],
"-cubic_Goursat") == 0) {
377 cout <<
"-cubic_Goursat" << endl;
383 coeff_text.assign(argv[++i]);
384 Numerics.
vec_scan(coeff_text, coeff, coeff_sz);
386 cout <<
"For -cubic_Goursat, number of coefficients must be 3; is " << coeff_sz << endl;
392 else if (ST.
stringcmp(argv[i],
"-quadric_lex_10") == 0) {
393 cout <<
"-quadric_lex_10" << endl;
399 coeff_text.assign(argv[++i]);
400 Numerics.
vec_scan(coeff_text, coeff, coeff_sz);
401 if (coeff_sz != 10) {
402 cout <<
"For -quadric_lex_10, number of coefficients must be 10; is " << coeff_sz << endl;
408 else if (ST.
stringcmp(argv[i],
"-quartic_lex_35") == 0) {
409 cout <<
"-quartic_lex_35" << endl;
415 coeff_text.assign(argv[++i]);
416 Numerics.
vec_scan(coeff_text, coeff, coeff_sz);
417 if (coeff_sz != 35) {
418 cout <<
"For -quartic_lex_35, number of coefficients must be 35; is " << coeff_sz << endl;
424 else if (ST.
stringcmp(argv[i],
"-quintic_lex_56") == 0) {
425 cout <<
"-quintic_lex_56" << endl;
431 coeff_text.assign(argv[++i]);
432 Numerics.
vec_scan(coeff_text, coeff, coeff_sz);
433 if (coeff_sz != 56) {
434 cout <<
"For -quintic_lex_56, number of coefficients must be 56; is " << coeff_sz << endl;
440 else if (ST.
stringcmp(argv[i],
"-octic_lex_165") == 0) {
441 cout <<
"-octic_lex_165" << endl;
447 coeff_text.assign(argv[++i]);
448 Numerics.
vec_scan(coeff_text, coeff, coeff_sz);
449 if (coeff_sz != 165) {
450 cout <<
"For -octic_lex_165, number of coefficients must be 165; is " << coeff_sz << endl;
456 else if (ST.
stringcmp(argv[i],
"-point") == 0) {
457 cout <<
"-point" << endl;
464 coeff_text.assign(argv[++i]);
465 Numerics.
vec_scan(coeff_text, coeff, coeff_sz);
467 cout <<
"For -point, the number of coefficients must be 3; is " << coeff_sz << endl;
470 idx =
point(coeff[0], coeff[1], coeff[2]);
471 cout <<
"created point " << idx << endl;
474 else if (ST.
stringcmp(argv[i],
"-point_list_from_csv_file") == 0) {
475 cout <<
"-point_list_from_csv_file" << endl;
481 fname.assign(argv[++i]);
483 m, n, verbose_level);
484 cout <<
"The file " << fname <<
" contains " << m
485 <<
" point coordinates, each with " << n <<
" coordinates" << endl;
487 for (h = 0; h < m; h++) {
488 point(M[h * 2 + 0], M[h * 2 + 1], 0);
492 for (h = 0; h < m; h++) {
493 point(M[h * 3 + 0], M[h * 3 + 1], M[h * 3 + 2]);
497 for (h = 0; h < m; h++) {
498 point(M[h * 4 + 0], M[h * 4 + 1], M[h * 4 + 2]);
502 cout <<
"The file " << fname <<
" should have either 2 or three columns" << endl;
507 else if (ST.
stringcmp(argv[i],
"-line_through_two_points_recentered_from_csv_file") == 0) {
508 cout <<
"-line_through_two_points_recentered_from_csv_file" << endl;
514 fname.assign(argv[++i]);
516 m, n, verbose_level);
517 cout <<
"The file " << fname <<
" contains " << m
518 <<
" point coordinates, each with " << n <<
" coordinates" << endl;
520 cout <<
"The file " << fname <<
" should have 6 columns" << endl;
523 for (h = 0; h < m; h++) {
525 M[h * 6 + 3], M[h * 6 + 4], M[h * 6 + 5],
530 else if (ST.
stringcmp(argv[i],
"-line_through_two_points_from_csv_file") == 0) {
531 cout <<
"-line_through_two_points_from_csv_file" << endl;
537 fname.assign(argv[++i]);
539 m, n, verbose_level);
540 cout <<
"The file " << fname <<
" contains " << m
541 <<
" point coordinates, each with " << n <<
" coordinates" << endl;
543 cout <<
"The file " << fname <<
" should have 6 columns" << endl;
546 for (h = 0; h < m; h++) {
547 line(M[h * 6 + 0], M[h * 6 + 1], M[h * 6 + 2],
548 M[h * 6 + 3], M[h * 6 + 4], M[h * 6 + 5]);
552 else if (ST.
stringcmp(argv[i],
"-point_as_intersection_of_two_lines") == 0) {
553 cout <<
"-point_as_intersection_of_two_lines" << endl;
559 Idx_text.assign(argv[++i]);
562 cout <<
"For -point_as_intersection_of_two_lines, "
563 "the number of indices must be 2; is " << Idx_sz << endl;
569 else if (ST.
stringcmp(argv[i],
"-edge") == 0) {
570 cout <<
"-edge" << endl;
576 Idx_text.assign(argv[++i]);
579 cout <<
"For -edge, the number of indices must be 2; is " << Idx_sz << endl;
582 edge(Idx[0], Idx[1]);
585 else if (ST.
stringcmp(argv[i],
"-label") == 0) {
586 cout <<
"-label" << endl;
591 pt_idx = ST.
strtoi(argv[++i]);
592 text.assign(argv[++i]);
595 else if (ST.
stringcmp(argv[i],
"-triangular_face_given_by_three_lines") == 0) {
596 cout <<
"-triangular_face_given_by_three_lines" << endl;
602 Idx_text.assign(argv[++i]);
605 cout <<
"For -triangular_face_given_by_three_lines, "
606 "the number of indices must be 3; is " << Idx_sz << endl;
609 triangle(Idx[0], Idx[1], Idx[2], 0 );
612 else if (ST.
stringcmp(argv[i],
"-face") == 0) {
613 cout <<
"-face" << endl;
619 Idx_text.assign(argv[++i]);
624 else if (ST.
stringcmp(argv[i],
"-quadric_through_three_skew_lines") == 0) {
625 cout <<
"-quadric_through_three_skew_lines" << endl;
631 Idx_text.assign(argv[++i]);
634 cout <<
"For -quadric_through_three_skew_lines, "
635 "the number of indices must be 3; is " << Idx_sz << endl;
641 else if (ST.
stringcmp(argv[i],
"-plane_defined_by_three_points") == 0) {
642 cout <<
"-plane_defined_by_three_points" << endl;
648 Idx_text.assign(argv[++i]);
651 cout <<
"For -plane_defined_by_three_points, "
652 "the number of indices must be 3; is " << Idx_sz << endl;
658 else if (ST.
stringcmp(argv[i],
"-line_through_two_points_recentered") == 0) {
659 cout <<
"-line_through_two_points_recentered" << endl;
665 coeff_text.assign(argv[++i]);
666 Numerics.
vec_scan(coeff_text, coeff, coeff_sz);
668 cout <<
"For -line_through_two_points_recentered, "
669 "the number of coefficients must be 6; is " << coeff_sz << endl;
676 else if (ST.
stringcmp(argv[i],
"-line_through_two_points") == 0) {
677 cout <<
"-line_through_two_points" << endl;
683 coeff_text.assign(argv[++i]);
684 Numerics.
vec_scan(coeff_text, coeff, coeff_sz);
686 cout <<
"For -line_through_two_points, "
687 "the number of coefficients must be 6; is " << coeff_sz << endl;
690 line(coeff[0], coeff[1], coeff[2], coeff[3], coeff[4], coeff[5]);
694 else if (ST.
stringcmp(argv[i],
"-line_through_two_existing_points") == 0) {
695 cout <<
"-line_through_two_existing_points" << endl;
701 Idx_text.assign(argv[++i]);
704 cout <<
"For -line_through_two_existing_points, "
705 "the number of indices must be 2; is " << Idx_sz << endl;
711 else if (ST.
stringcmp(argv[i],
"-line_through_point_with_direction") == 0) {
712 cout <<
"-line_through_point_with_direction" << endl;
718 coeff_text.assign(argv[++i]);
719 Numerics.
vec_scan(coeff_text, coeff, coeff_sz);
721 cout <<
"For -line_through_point_with_direction, "
722 "the number of coefficients must be 6; is " << coeff_sz << endl;
725 line_after_recentering(coeff[0], coeff[1], coeff[2], coeff[0] + coeff[3], coeff[1] + coeff[4], coeff[2] + coeff[5], 10);
728 else if (ST.
stringcmp(argv[i],
"-plane_by_dual_coordinates") == 0) {
729 cout <<
"-plane_by_dual_coordinates" << endl;
735 coeff_text.assign(argv[++i]);
736 Numerics.
vec_scan(coeff_text, coeff, coeff_sz);
738 cout <<
"For -plane_by_dual_coordinates, "
739 "the number of coefficients must be 4; is " << coeff_sz << endl;
745 else if (ST.
stringcmp(argv[i],
"-dodecahedron") == 0) {
746 cout <<
"-dodecahedron" << endl;
762 else if (ST.
stringcmp(argv[i],
"-Hilbert_Cohn_Vossen_surface") == 0) {
763 cout <<
"-Hilbert_Cohn_Vossen_surface" << endl;
772 else if (ST.
stringcmp(argv[i],
"-Clebsch_surface") == 0) {
773 cout <<
"-Clebsch_surface" << endl;
782 else if (ST.
stringcmp(argv[i],
"-obj_file") == 0) {
783 cout <<
"-obj_file" << endl;
786 fname.assign(argv[++i]);
787 cout <<
"before reading file " << fname << endl;
789 cout <<
"after reading file " << fname << endl;
797int scene::scan2(
int argc, std::string *argv,
int &i,
int verbose_level)
799 int f_v = (verbose_level >= 1);
802 if (ST.
stringcmp(argv[i],
"-group_of_things") == 0) {
803 cout <<
"-group_of_things" << endl;
808 Idx_text.assign(argv[++i]);
809 cout <<
"group: " << Idx_text << endl;
816 cout <<
"end of -group_of_things" << endl;
818 else if (ST.
stringcmp(argv[i],
"-group_of_things_with_offset") == 0) {
819 cout <<
"-group_of_things" << endl;
825 offset = ST.
strtoi(argv[++i]);
826 Idx_text.assign(argv[++i]);
828 for (h = 0; h < Idx_sz; h++) {
834 else if (ST.
stringcmp(argv[i],
"-group_of_things_as_interval") == 0) {
835 cout <<
"-group_of_things_as_interval" << endl;
841 start = ST.
strtoi(argv[++i]);
842 len = ST.
strtoi(argv[++i]);
844 for (h = 0; h < len; h++) {
850 else if (ST.
stringcmp(argv[i],
"-group_of_things_as_interval_with_exceptions") == 0) {
851 cout <<
"-group_of_things_as_interval_with_exceptions" << endl;
854 string exceptions_text;
861 start = ST.
strtoi(argv[++i]);
862 len = ST.
strtoi(argv[++i]);
863 exceptions_text.assign(argv[++i]);
865 Int_vec_scan(exceptions_text, exceptions, exceptions_sz);
868 for (h = 0; h < len; h++) {
872 for (h = 0; h < exceptions_sz; h++) {
874 cout <<
"-group_of_things_as_interval_with_exceptions "
875 "exception not found, value = " << exceptions[h] << endl;
882 cout <<
"creating a group of things of size " << len << endl;
887 else if (ST.
stringcmp(argv[i],
"-group_of_all_points") == 0) {
888 cout <<
"-group_of_all_points" << endl;
895 for (h = 0; h < Idx_sz; h++) {
901 else if (ST.
stringcmp(argv[i],
"-group_of_all_faces") == 0) {
902 cout <<
"-group_of_all_faces" << endl;
909 for (h = 0; h < Idx_sz; h++) {
914 <<
" consisting of " << Idx_sz <<
" faces" << endl;
917 else if (ST.
stringcmp(argv[i],
"-group_subset_at_random") == 0) {
918 cout <<
"-group_subset_at_random" << endl;
928 group_idx = ST.
strtoi(argv[++i]);
929 percentage = ST.
strtoi(argv[++i]);
934 cout <<
"sz_old" << sz_old << endl;
936 sz = sz_old * percentage;
938 for (j = 0; j < sz; j++) {
948 else if (ST.
stringcmp(argv[i],
"-create_regulus") == 0) {
949 cout <<
"-create_regulus" << endl;
952 idx = ST.
strtoi(argv[++i]);
956 else if (ST.
stringcmp(argv[i],
"-spheres") == 0) {
957 cout <<
"-spheres" << endl;
962 group_idx = ST.
strtoi(argv[++i]);
963 rad = ST.
strtof(argv[++i]);
964 properties.assign(argv[++i]);
968 D.
init_spheres(group_idx, rad, properties, verbose_level);
971 else if (ST.
stringcmp(argv[i],
"-cylinders") == 0) {
972 cout <<
"-cylinders" << endl;
977 group_idx = ST.
strtoi(argv[++i]);
978 rad = ST.
strtof(argv[++i]);
979 properties.assign(argv[++i]);
986 else if (ST.
stringcmp(argv[i],
"-prisms") == 0) {
987 cout <<
"-prisms" << endl;
992 group_idx = ST.
strtoi(argv[++i]);
993 thickness = ST.
strtof(argv[++i]);
994 properties.assign(argv[++i]);
998 D.
init_prisms(group_idx, thickness, properties, verbose_level);
1001 else if (ST.
stringcmp(argv[i],
"-planes") == 0) {
1002 cout <<
"-planes" << endl;
1007 group_idx = ST.
strtoi(argv[++i]);
1009 properties.assign(argv[++i]);
1013 D.
init_planes(group_idx, properties, verbose_level);
1016 else if (ST.
stringcmp(argv[i],
"-lines") == 0) {
1017 cout <<
"-lines" << endl;
1022 group_idx = ST.
strtoi(argv[++i]);
1023 rad = ST.
strtof(argv[++i]);
1024 properties.assign(argv[++i]);
1028 D.
init_lines(group_idx, rad, properties, verbose_level);
1031 else if (ST.
stringcmp(argv[i],
"-cubics") == 0) {
1032 cout <<
"-cubics" << endl;
1037 group_idx = ST.
strtoi(argv[++i]);
1039 properties.assign(argv[++i]);
1043 D.
init_cubics(group_idx, properties, verbose_level);
1046 else if (ST.
stringcmp(argv[i],
"-quadrics") == 0) {
1047 cout <<
"-quadrics" << endl;
1052 group_idx = ST.
strtoi(argv[++i]);
1054 properties.assign(argv[++i]);
1061 else if (ST.
stringcmp(argv[i],
"-quartics") == 0) {
1062 cout <<
"-quartics" << endl;
1067 group_idx = ST.
strtoi(argv[++i]);
1069 properties.assign(argv[++i]);
1076 else if (ST.
stringcmp(argv[i],
"-quintics") == 0) {
1077 cout <<
"-quintics" << endl;
1082 group_idx = ST.
strtoi(argv[++i]);
1084 properties.assign(argv[++i]);
1091 else if (ST.
stringcmp(argv[i],
"-octics") == 0) {
1092 cout <<
"-octics" << endl;
1097 group_idx = ST.
strtoi(argv[++i]);
1099 properties.assign(argv[++i]);
1103 D.
init_octics(group_idx, properties, verbose_level);
1106 else if (ST.
stringcmp(argv[i],
"-texts") == 0) {
1107 cout <<
"-texts" << endl;
1109 double thickness_half;
1113 group_idx = ST.
strtoi(argv[++i]);
1114 thickness_half = ST.
strtof(argv[++i]);
1115 scale = ST.
strtof(argv[++i]);
1116 properties.assign(argv[++i]);
1120 D.
init_labels(group_idx, thickness_half, scale, properties, verbose_level);
1123 else if (ST.
stringcmp(argv[i],
"-deformation_of_cubic_lex") == 0) {
1124 cout <<
"-deformation_of_cubic_lex" << endl;
1128 double angle_start, angle_max, angle_min;
1134 nb_frames = ST.
strtoi(argv[++i]);
1135 angle_start = ST.
strtof(argv[++i]);
1136 angle_max = ST.
strtof(argv[++i]);
1137 angle_min = ST.
strtof(argv[++i]);
1138 coeff1_text.assign(argv[++i]);
1139 Numerics.
vec_scan(coeff1_text, coeff1, coeff_sz);
1140 if (coeff_sz != 20) {
1141 cout <<
"For -deformation_of_cubic_lex, number of coefficients "
1142 "must be 20; is " << coeff_sz << endl;
1145 coeff2_text.assign(argv[++i]);
1146 Numerics.
vec_scan(coeff2_text, coeff2, coeff_sz);
1147 if (coeff_sz != 20) {
1148 cout <<
"For -deformation_of_cubic_lex, number of coefficients "
1149 "must be 20; is " << coeff_sz << endl;
1153 nb_frames, angle_start, angle_max, angle_min,
1159 else if (ST.
stringcmp(argv[i],
"-group_is_animated") == 0) {
1160 cout <<
"-group_is_animated" << endl;
1163 group_idx = ST.
strtoi(argv[++i]);
1169 cout <<
"-group_is_animated " << group_idx << endl;
1178 int i0,
int verbose_level)
1180 int f_v = (verbose_level >= 1);
1185 cout <<
"scene::read_scene_objects" << endl;
1187 for (i = i0; i < argc; i++) {
1189 if (
scan1(argc, argv, i, verbose_level)) {
1192 else if (
scan2(argc, argv, i, verbose_level)) {
1195 else if (ST.
stringcmp(argv[i],
"-scene_objects_end") == 0) {
1196 cout <<
"-scene_object_end " << endl;
1200 cout <<
"-scene: unrecognized option " << argv[i] <<
" ignored" << endl;
1205 cout <<
"scene::read_scene_objects done" << endl;
a collection of functions related to sorted vectors
void int_vec_sort_and_remove_duplicates(int *v, int &len)
int int_vec_search_and_remove_if_found(int *v, int &len, int a)
a set of objects that should be drawn with certain povray properties
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 init_prisms(int group_idx, double thickness, std::string &properties, int verbose_level)
int line_through_two_pts(double *x6, double rad)
void clipping_by_cylinder(int line_idx, double r, std::ostream &ost)
void add_a_group_of_things(int *Idx, int sz, int verbose_level)
int edge(int pt1, int pt2)
int point(double x1, double x2, double x3)
void Dodecahedron_points()
int read_scene_objects(int argc, std::string *argv, int i0, int verbose_level)
int cubic_Goursat_ABC(double A, double B, double C)
int line(double x1, double x2, double x3, double y1, double y2, double y3)
int scan1(int argc, std::string *argv, int &i, int verbose_level)
int point_as_intersection_of_two_lines(int line1, int line2)
std::vector< std::vector< int > > group_of_things
int plane_from_dual_coordinates(double *x4)
std::vector< int > animated_groups
int scan2(int argc, std::string *argv, int &i, int verbose_level)
int plane_through_three_points(int pt1, int pt2, int pt3)
int octic(double *coeff_165)
double label(int idx, std::string &txt)
int triangle(int line1, int line2, int line3, int verbose_level)
int line_after_recentering(double x1, double x2, double x3, double y1, double y2, double y3, double rad)
int quadric(double *coeff)
double quadric_coords(int idx, int j)
void deformation_of_cubic_lex(int nb_frames, double angle_start, double angle_max, double angle_min, double *coeff1, double *coeff2, int verbose_level)
int quartic(double *coeff)
void Dodecahedron_edges(int first_pt_idx)
void read_obj_file(std::string &fname, int verbose_level)
std::vector< drawable_set_of_objects > Drawables
void create_Hilbert_Cohn_Vossen_surface(int verbose_level)
int quintic(double *coeff_56)
int line_through_two_points(int pt1, int pt2, double rad)
int face(int *pts, int nb_pts)
int quadric_through_three_lines(int line_idx1, int line_idx2, int line_idx3, int verbose_level)
void create_regulus(int idx, int nb_lines, int verbose_level)
int cubic_in_orbiter_ordering(double *coeff)
void Dodecahedron_planes(int first_pt_idx)
void create_Clebsch_surface(int verbose_level)
numerical functions, mostly concerned with double
void make_Rz(double *R, double phi)
void eigenvectors(double *A, double *Basis, int n, double *lambda, int verbose_level)
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 eigenvalues(double *A, int n, double *lambda, int verbose_level)
void transpose_matrix_nxn(double *A, double *At, int n)
void vec_scan(const char *s, double *&v, int &len)
void output_double(double a, std::ostream &ost)
void mult_matrix_matrix(double *A, double *B, double *C, int m, int n, int o)
a collection of functions related to file io
void double_matrix_read_csv(std::string &fname, double *&M, int &m, int &n, int verbose_level)
interface to system functions
int random_integer(int p)
#define Int_vec_scan(A, B, C)
#define Int_vec_print(A, B, C)
the orbiter library for the classification of combinatorial objects