17namespace layer1_foundations {
18namespace algebraic_geometry {
90 cout <<
"before FREE_int(Trihedral_pairs);" << endl;
110 cout <<
"before FREE_OBJECT Classify_trihedral_pairs_"
111 "row_values;" << endl;
158 int f_v = (verbose_level >= 1);
161 cout <<
"schlaefli::init" << endl;
169 cout <<
"schlaefli::init before Labels->init" << endl;
173 cout <<
"schlaefli::init after Labels->init" << endl;
178 cout <<
"schlaefli::init before make_trihedral_pairs" << endl;
182 cout <<
"schlaefli::init after make_trihedral_pairs" << endl;
186 cout <<
"schlaefli::init before make_triads" << endl;
190 cout <<
"schlaefli::init after make_triads" << endl;
194 cout <<
"schlaefli::init before process_trihedral_pairs" << endl;
198 cout <<
"schlaefli::init after process_trihedral_pairs" << endl;
202 cout <<
"schlaefli::init before make_Eckardt_points" << endl;
206 cout <<
"schlaefli::init after make_Eckardt_points" << endl;
210 cout <<
"schlaefli::init before init_Trihedral_to_Eckardt" << endl;
214 cout <<
"schlaefli::init after init_Trihedral_to_Eckardt" << endl;
218 cout <<
"schlaefli::init before init_collinear_Eckardt_triples" << endl;
222 cout <<
"schlaefli::init after init_collinear_Eckardt_triples" << endl;
226 cout <<
"schlaefli::init before init_double_sixes" << endl;
230 cout <<
"schlaefli::init after init_double_sixes" << endl;
234 cout <<
"schlaefli::init before create_half_double_sixes" << endl;
238 cout <<
"schlaefli::init after create_half_double_sixes" << endl;
243 cout <<
"schlaefli::init before init_adjacency_matrix_of_lines" << endl;
247 cout <<
"schlaefli::init after init_adjacency_matrix_of_lines" << endl;
251 cout <<
"schlaefli::init before init_incidence_matrix_of_lines_vs_tritangent_planes" << endl;
255 cout <<
"schlaefli::init after init_incidence_matrix_of_lines_vs_tritangent_planes" << endl;
260 cout <<
"schlaefli::init done" << endl;
268 int &plane1,
int &plane2,
int verbose_level)
270 int f_v = (verbose_level >= 1);
276 cout <<
"schlaefli::find_tritangent_planes_intersecting_in_a_line" << endl;
282 for (plane2 = plane1 + 1;
289 cout <<
"schlaefli::find_tritangent_planes_"
290 "intersecting_in_a_line done" << endl;
297 cout <<
"schlaefli::find_tritangent_planes_intersecting_in_a_line could not find "
298 "two planes" << endl;
304 int f_v = (verbose_level >= 1);
310 cout <<
"schlaefli::make_triads" << endl;
316 for (j = 0; j < i; j++) {
333 cout <<
"schlaefli::make_triads u != 3" << endl;
339 cout <<
"schlaefli::make_triads h != 40" << endl;
344 cout <<
"schlaefli::make_triads done" << endl;
350 int f_v = (verbose_level >= 1);
356 cout <<
"schlaefli::make_trihedral_pair_disjointness_graph" << endl;
389 cout <<
"schlaefli::make_trihedral_pair_disjointness_graph done" << endl;
396 int f_v = (verbose_level >= 1);
399 int second_subset[6];
401 int subset_complement[6];
408 cout <<
"schlaefli::make_trihedral_pairs" << endl;
417 for (h = 0; h < 20; h++, idx++) {
421 snprintf(label, 1000,
"%d%d%d;%d%d%d",
422 subset[0] + 1, subset[1] + 1, subset[2] + 1,
423 complement[0] + 1, complement[1] + 1, complement[2] + 1);
430 for (h = 0; h < 15; h++) {
434 for (s = 0; s < 6; s++, idx++) {
439 subset[second_subset[0]],
440 subset[second_subset[1]],
441 subset[complement[0]],
442 subset[complement[1]]);
443 snprintf(label, 1000,
"%d%d;%d%d;%d%d",
444 subset[second_subset[0]] + 1,
445 subset[second_subset[1]] + 1,
446 subset[complement[0]] + 1,
447 subset[complement[1]] + 1,
448 subset_complement[0] + 1,
449 subset_complement[1] + 1);
455 for (h = 0; h < 10; h++, idx++) {
463 subset[0], subset[1], subset[2],
464 complement[0], complement[1], complement[2]);
465 snprintf(label, 1000,
"%d%d%d,%d%d%d",
476 cout <<
"schlaefli::make_trihedral_pairs idx != 120" << endl;
482 cout <<
"The trihedral pairs are:" << endl;
490 cout <<
"schlaefli::make_trihedral_pairs done" << endl;
496 int f_v = (verbose_level >= 1);
504 cout <<
"schlaefli::process_trihedral_pairs" << endl;
509 for (j = 0; j < 3; j++) {
510 for (h = 0; h < 3; h++) {
521 for (j = 0; j < 3; j++) {
522 for (h = 0; h < 3; h++) {
534 cout <<
"schlaefli::process_trihedral_pairs "
535 "The trihedral pairs row sets:" << endl;
540 cout <<
"The trihedral pairs col sets:" << endl;
551 cout <<
"schlaefli::process_trihedral_pairs "
552 "sorted row values:" << endl;
555 120 * 3 / 10, 10,
FALSE );
564 cout <<
"schlaefli::process_trihedral_pairs "
565 "sorted col values:" << endl;
568 120 * 3 / 10, 10,
FALSE );
571 cout <<
"schlaefli::process_trihedral_pairs done" << endl;
578 cout <<
"schlaefli::line_ai i >= 6" << endl;
587 cout <<
"schlaefli::line_bi i >= 6" << endl;
602 cout <<
"schlaefli::line_cij i==j" << endl;
606 cout <<
"schlaefli::line_cij i >= 6" << endl;
610 cout <<
"schlaefli::line_cij j >= 6" << endl;
613 a = Combi.
ij2k(i, j, 6);
623 else if (line < 12) {
626 else if (line < 27) {
630 cout <<
"schlaefli::type_of_line error" << endl;
644 else if (line < 12) {
647 else if (line < 27) {
649 Combi.
k2ij(a, i, j, 6);
652 cout <<
"schlaefli::index_of_line error" << endl;
659 int f_v = (verbose_level >= 1);
660 int h, i, j, k, l, m, n;
663 cout <<
"schlaefli::third_line_in_tritangent_plane" << endl;
675 cout <<
"schlaefli::third_line_in_tritangent_plane impossible (1)" << endl;
691 cout <<
"schlaefli::third_line_in_tritangent_plane impossible (2)" << endl;
700 cout <<
"schlaefli::third_line_in_tritangent_plane impossible (3)" << endl;
711 cout <<
"schlaefli::third_line_in_tritangent_plane impossible (4)" << endl;
769 int d,
int e,
int f,
int g,
int h,
int t)
784 int f_v = (verbose_level >= 1);
789 cout <<
"schlaefli::make_Eckardt_points" << endl;
804 cout <<
"schlaefli::make_Eckardt_points done" << endl;
811 int f_v = (verbose_level >= 1);
813 int tritangent_plane[3];
817 cout <<
"schlaefli::init_Trihedral_to_Eckardt" << endl;
822 for (i = 0; i < 3; i++) {
823 for (j = 0; j < 3; j++) {
829 for (j = 0; j < 3; j++) {
830 for (i = 0; i < 3; i++) {
838 cout <<
"Trihedral_to_Eckardt:" << endl;
844 cout <<
"schlaefli::init_Trihedral_to_Eckardt done" << endl;
856 a = tritangent_plane[0];
857 b = tritangent_plane[1];
858 c = tritangent_plane[2];
864 cout <<
"schlaefli::Eckardt_point_from_tritangent_plane a < 12" << endl;
879 int f_v = (verbose_level >= 1);
887 cout <<
"schlaefli::init_collinear_Eckardt_triples" << endl;
892 for (i = 0; i < 2; i++) {
893 for (h = 0; h < 3; h++) {
902 cout <<
"collinear_Eckardt_triples_rank:" << endl;
914 cout <<
"schlaefli::init_collinear_Eckardt_triples done" << endl;
919 int *E_idx,
int nb_E,
920 int *&T_idx,
int &nb_T,
int verbose_level)
922 int f_v = (verbose_level >= 1);
923 int nCk, h, k, rk, idx, i, t_idx;
930 cout <<
"schlaefli::find_trihedral_pairs_from_collinear_"
931 "triples_of_Eckardt_points" << endl;
936 for (h = 0; h < nCk; h++) {
942 for (k = 0; k < 3; k++) {
943 set[k] = E_idx[subset[k]];
959 for (i = idx; i >= 0; i--) {
974 if (!int_vec_search(T_idx, nb_T, t_idx, idx2)) {
975 for (j = nb_T; j > idx2; j--) {
976 T_idx[j] = T_idx[j - 1];
982 cout <<
"We already have this trihedral pair" << endl;
985 T_idx[nb_T++] = t_idx;
997 cout <<
"The trihedral pairs come in these multiplicities: ";
1015 for (i = 0; i < l2; i++) {
1024 for (j = 0; j < l1; j++) {
1042 cout <<
"Found " << nb_T <<
" special trihedral pairs:" << endl;
1046 for (i = 0; i < nb_T; i++) {
1047 cout << i <<
" / " << nb_T <<
" T_{"
1051 cout <<
"schlaefli::find_trihedral_pairs_from_collinear_"
1052 "triples_of_Eckardt_points done" << endl;
1059 int f_v = (verbose_level >= 1);
1060 int i, j, k, ij, u, v, l, m, n, h, a, b, c;
1062 int size_complement;
1066 cout <<
"schlaefli::init_double_sixes" << endl;
1071 for (i = 0; i < 12; i++) {
1080 for (ij = 0; ij < 15; ij++, h++) {
1082 Combi.
k2ij(ij, i, j, 6);
1086 size_complement, 6 );
1092 for (u = 0; u < 4; u++) {
1097 for (u = 0; u < 4; u++) {
1105 for (v = 0; v < 20; v++, h++) {
1109 size_complement, 6 );
1131 cout <<
"schlaefli::init_double_sixes h != 36" << endl;
1138 for (i = 0; i < 36; i++) {
1140 snprintf(str, 1000,
"{\\cal D}");
1142 else if (i < 1 + 15) {
1144 Combi.
k2ij(ij, a, b, 6);
1148 size_complement, 6 );
1149 snprintf(str, 1000,
"{\\cal D}_{%d%d}", a + 1, b + 1);
1155 size_complement, 6 );
1159 snprintf(str, 1000,
"{\\cal D}_{%d%d%d}", a + 1, b + 1, c + 1);
1162 cout <<
"creating label " << str
1163 <<
" for Double six " << i << endl;
1169 cout <<
"schlaefli::init_double_sixes done" << endl;
1175 int f_v = (verbose_level >= 1);
1176 int i, j, a, b, c, ij, v;
1178 int size_complement;
1183 cout <<
"schlaefli::create_half_double_sixes" << endl;
1190 for (i = 0; i < 36; i++) {
1191 for (j = 0; j < 2; j++) {
1201 for (i = 0; i < 36; i++) {
1202 for (j = 0; j < 2; j++) {
1204 snprintf(str, 1000,
"D");
1206 else if (i < 1 + 15) {
1208 Combi.
k2ij(ij, a, b, 6);
1212 set + 2, size_complement,
1214 snprintf(str, 1000,
"D_{%d%d}", a + 1, b + 1);
1220 set + 3, size_complement,
1225 snprintf(str, 1000,
"D_{%d%d%d}",
1226 a + 1, b + 1, c + 1);
1229 sprintf(str + strlen(str),
"^\\top");
1232 sprintf(str + strlen(str),
"^\\bot");
1235 cout <<
"creating label " << str
1236 <<
" for half double six "
1237 << 2 * i + j << endl;
1244 cout <<
"schlaefli::create_half_double_sixes done" << endl;
1254 for (i = 0; i < 72; i++) {
1260 cout <<
"schlaefli::find_half_double_six did not find "
1261 "half double six" << endl;
1268 int size_complement;
1277 if (size_complement != 1) {
1278 cout <<
"schlaefli::ijklm2n size_complement != 1" << endl;
1287 int size_complement;
1295 if (size_complement != 2) {
1296 cout <<
"schlaefli::ijkl2mn size_complement != 2" << endl;
1306 int size_complement;
1312 cout <<
"schlaefli::ijk2lmn v=";
1316 if (size_complement != 3) {
1317 cout <<
"schlaefli::ijk2lmn size_complement != 3" << endl;
1318 cout <<
"size_complement=" << size_complement << endl;
1329 int size_complement;
1335 if (size_complement != 4) {
1336 cout <<
"schlaefli::ij2klmn size_complement != 4" << endl;
1346 int line1,
int line2,
int transversal,
1350 int f_v = (verbose_level >= 1);
1352 int i, j, k, l, m, n;
1357 cout <<
"schlaefli::get_half_double_six_associated_with_Clebsch_map" << endl;
1360 if (line1 > line2) {
1361 cout <<
"schlaefli::get_half_double_six_associated_"
1362 "with_Clebsch_map line1 > line2" << endl;
1370 cout <<
"t1=" << t1 <<
" t2=" << t2 <<
" t3=" << t3 << endl;
1372 if (t1 == 0 && t2 == 0) {
1390 if ((i == i1 && j == j1) || (i == j1 && j == i1)) {
1401 cout <<
"schlaefli::get_half_doble_six_associated_"
1402 "with_Clebsch_map not {i,j} = {i1,j1}" << endl;
1407 else if (t1 == 1 && t2 == 1) {
1423 if ((i == i1 && j == j1) || (i == j1 && j == i1)) {
1434 cout <<
"schlaefli::get_half_doble_six_associated_"
1435 "with_Clebsch_map not {i,j} = {i1,j1}" << endl;
1440 else if (t1 == 0 && t2 == 1) {
1444 cout <<
"schlaefli::get_half_double_six_associated_"
1445 "with_Clebsch_map j != i" << endl;
1449 cout <<
"schlaefli::get_half_double_six_associated_"
1450 "with_Clebsch_map t3 != 2" << endl;
1469 else if (t1 == 1 && t2 == 2) {
1481 cout <<
"schlaefli::get_half_double_six_associated_"
1482 "with_Clebsch_map error" << endl;
1503 cout <<
"schlaefli::get_half_double_six_associated_"
1504 "with_Clebsch_map error" << endl;
1517 else if (t1 == 0 && t2 == 2) {
1529 cout <<
"schlaefli::get_half_double_six_associated_"
1530 "with_Clebsch_map error" << endl;
1551 cout <<
"schlaefli::get_half_double_six_associated_"
1552 "with_Clebsch_map error" << endl;
1565 else if (t1 == 2 && t2 == 2) {
1585 cout <<
"schlaefli::get_half_double_six_associated_"
1586 "with_Clebsch_map error" << endl;
1592 cout <<
"schlaefli::get_half_double_six_associated_"
1593 "with_Clebsch_map error" << endl;
1608 cout <<
"schlaefli::get_half_double_six_associated_"
1609 "with_Clebsch_map error" << endl;
1634 cout <<
"schlaefli::get_half_double_six_associated_"
1635 "with_Clebsch_map error" << endl;
1639 cout <<
"schlaefli::get_half_double_six_associated_with_Clebsch_map done" << endl;
1644 int &line1,
int &line2,
int &transversal,
1647 int ij, i, j, k, l, m, n, size_complement;
1668 Combi.
k2ij(ij, i, j, 6);
1686 size_complement, 6 );
1709 int f_v = (verbose_level >= 1);
1713 cout <<
"schlaefli::init_adjacency_matrix_of_lines" << endl;
1720 for (i = 0; i < 6; i++) {
1721 for (j = 0; j < 6; j++) {
1727 for (k = 0; k < 6; k++) {
1737 for (i = 0; i < 6; i++) {
1738 for (j = 0; j < 6; j++) {
1744 for (k = 0; k < 6; k++) {
1756 for (i = 0; i < 6; i++) {
1757 for (j = 0; j < 6; j++) {
1761 for (k = 0; k < 6; k++) {
1768 for (l = 0; l < 6; l++) {
1787 for (i = 0; i < 27; i++) {
1789 for (j = 0; j < 27; j++) {
1795 cout <<
"schlaefli::init_adjacency_matrix_of_lines "
1796 "row sum r != 10, r = " << r <<
" in row " << i << endl;
1800 for (j = 0; j < 27; j++) {
1802 for (i = 0; i < 27; i++) {
1808 cout <<
"schlaefli::init_adjacency_matrix_of_lines "
1809 "col sum c != 10, c = " << c <<
" in col " << j << endl;
1814 cout <<
"schlaefli::init_adjacency_matrix_of_lines done" << endl;
1820 int f_v = (verbose_level >= 1);
1825 cout <<
"schlaefli::init_incidence_matrix_of_lines_vs_tritangent_planes" << endl;
1840 for (h = 0; h < 3; h++) {
1844 for (h = 0; h < 3; h++) {
1853 cout <<
"schlaefli::init_incidence_matrix_of_lines_vs_tritangent_planes done" << endl;
1869 int transversal_line,
int verbose_level)
1871 int f_v = (verbose_level >= 1);
1876 cout <<
"schlaefli::choose_tritangent_plane_for_Clebsch_map" << endl;
1880 for (j = 0; j < 45; j++) {
1888 cout <<
"schlaefli::choose_tritangent_plane_for_Clebsch_map nb != 3" << endl;
1892 cout <<
"schlaefli::choose_tritangent_plane_for_Clebsch_map done" << endl;
1899 ost <<
"\\clearpage" << endl << endl;
1900 ost <<
"\\section*{Eckardt Points}" << endl;
1903 ost <<
"\\clearpage" << endl << endl;
1904 ost <<
"\\section*{Double Sixes}" << endl;
1907 ost <<
"\\clearpage" << endl << endl;
1908 ost <<
"\\section*{Half Double Sixes}" << endl;
1911 ost <<
"\\clearpage" << endl << endl;
1912 ost <<
"\\section*{Tritangent Planes}" << endl;
1915 ost <<
"\\clearpage" << endl << endl;
1916 ost <<
"\\section*{Steiner Trihedral Pairs}" << endl;
1919 ost <<
"\\clearpage" << endl << endl;
1920 ost <<
"\\section*{Triads}" << endl;
1935 ost <<
"\\begin{multicols}{5}" << endl;
1936 ost <<
"\\noindent";
1937 for (i = 0; i < 27; i++) {
1938 ost <<
"$" << i <<
" = ";
1940 ost <<
"$\\\\" << endl;
1942 ost <<
"\\end{multicols}" << endl;
1949 ost <<
"\\begin{array}{*{" << 3 <<
"}{c}|c}" << endl;
1950 for (i = 0; i < 3; i++) {
1951 for (j = 0; j < 3; j++) {
1957 ost <<
"}\\\\" << endl;
1959 ost <<
"\\hline" << endl;
1960 for (j = 0; j < 3; j++) {
1965 ost <<
"\\\\" << endl;
1966 ost <<
"\\end{array}" << endl;
1973 cout <<
"schlaefli::latex_table_of_trihedral_pairs" << endl;
1974 ost <<
"\\begin{multicols}{2}" << endl;
1976 ost <<
"$T_{" << i <<
"} = T_{"
1984 ost <<
"$\\\\" << endl;
1988 ost <<
"$\\\\" << endl;
1991 ost <<
"\\end{multicols}" << endl;
1995 cout <<
"schlaefli::latex_table_of_trihedral_pairs done" << endl;
2003 cout <<
"schlaefli::latex_triads" << endl;
2005 ost <<
"\\subsection*{Triads}" << endl;
2006 ost <<
"The 40 triads are:\\\\" << endl;
2008 ost <<
"$$" << endl;
2013 ost <<
"\\begin{multicols}{2}" << endl;
2015 ost <<
"\\noindent ${\\cal T}_{" << i <<
"} = \\{";
2016 for (j = 0; j < 3; j++) {
2023 ost <<
"\\}$\\\\" << endl;
2025 ost <<
"\\end{multicols}" << endl;
2027 cout <<
"schlaefli::latex_triads done" << endl;
2037 ost <<
"\\bigskip" << endl;
2040 ost <<
"\\subsection*{Trihedral pairs}" << endl;
2041 ost <<
"The 120 trihedral pairs are:\\\\" << endl;
2042 ost <<
"{\\renewcommand{\\arraystretch}{1.3}" << endl;
2043 ost <<
"$$" << endl;
2051 ost <<
"\\begin{array}{|r|r|*{" << n <<
"}r|}" << endl;
2052 ost <<
"\\hline" << endl;
2054 for (j = 0; j < n; j++) {
2055 ost <<
" & " << n_offset + j;
2057 ost <<
"\\\\" << endl;
2058 ost <<
"\\hline" << endl;
2059 for (i = 0; i < m; i++) {
2060 ost << m_offset + i <<
" & S_{";
2062 for (j = 0; j < n; j++) {
2069 ost <<
"\\hline" << endl;
2070 ost <<
"\\end{array}" << endl;
2074 ost <<
"$$" << endl;
2077 ost <<
"$$" << endl;
2082 ost <<
"\\begin{array}{|r|r|*{" << n <<
"}r|}" << endl;
2083 ost <<
"\\hline" << endl;
2085 for (j = 0; j < n; j++) {
2086 ost <<
" & " << n_offset + j;
2088 ost <<
"\\\\" << endl;
2089 ost <<
"\\hline" << endl;
2090 for (i = 0; i < m; i++) {
2091 ost << m_offset + i <<
" & S_{";
2093 for (j = 0; j < n; j++) {
2100 ost <<
"\\hline" << endl;
2101 ost <<
"\\end{array}" << endl;
2107 ost <<
"$$" << endl;
2108 ost <<
"$$" << endl;
2113 ost <<
"\\begin{array}{|r|r|*{" << n <<
"}r|}" << endl;
2114 ost <<
"\\hline" << endl;
2116 for (j = 0; j < n; j++) {
2117 ost <<
" & " << n_offset + j;
2119 ost <<
"\\\\" << endl;
2120 ost <<
"\\hline" << endl;
2121 for (i = 0; i < m; i++) {
2122 ost << m_offset + i <<
" & S_{";
2124 for (j = 0; j < n; j++) {
2131 ost <<
"\\hline" << endl;
2132 ost <<
"\\end{array}" << endl;
2138 ost <<
"$$}" << endl;
2147 ost <<
"List of trihedral pairs:\\\\" << endl;
2150 <<
": $T_{" << i <<
"} = T_{"
2152 for (j = 0; j < 6; j++) {
2158 else if (j < 6 - 1) {
2162 ost <<
")$\\\\" << endl;
2164 ost <<
"List of trihedral pairs numerically:\\\\" << endl;
2165 ost <<
"$$" << endl;
2166 L.print_lint_matrix_with_standard_labels_and_offset(ost,
2171 L.print_lint_matrix_with_standard_labels_and_offset(ost,
2176 L.print_lint_matrix_with_standard_labels_and_offset(ost,
2178 ost <<
"$$" << endl;
2192 for (h = 0; h < 36; h++) {
2198 ost <<
" = \\left[";
2199 ost <<
"\\begin{array}{cccccc}" << endl;
2200 for (i = 0; i < 2; i++) {
2201 for (j = 0; j < 6; j++) {
2207 ost <<
"\\\\" << endl;
2209 ost <<
"\\end{array}" << endl;
2210 ost <<
"\\right]" << endl;
2211 ost <<
" = \\left[";
2212 ost <<
"\\begin{array}{cccccc}" << endl;
2213 for (i = 0; i < 2; i++) {
2214 for (j = 0; j < 6; j++) {
2215 ost << D[i * 6 + j];
2220 ost <<
"\\\\" << endl;
2222 ost <<
"\\end{array}" << endl;
2223 ost <<
"\\right]" << endl;
2224 ost <<
"$\\\\" << endl;
2242 for (i = 0; i < 72; i++) {
2249 ost <<
"$\\\\" << endl;
2274 for (j = 0; j < 6; j++) {
2284 for (j = 0; j < 6; j++) {
2306 ost <<
"\\begin{multicols}{2}" << endl;
2311 ost <<
"$E_{" << i <<
"} = " << endl;
2314 for (j = 0; j < 3; j++) {
2320 ost <<
"$\\\\" << endl;
2322 ost <<
"\\end{multicols}" << endl;
2332 ost <<
"\\begin{multicols}{2}" << endl;
2337 ost <<
"$\\pi_{" << i <<
"} = \\pi_{" << endl;
2340 for (j = 0; j < 3; j++) {
2343 ost <<
"$\\\\" << endl;
2345 ost <<
"\\end{multicols}" << endl;
2354 ost <<
"a_" << rk + 1 << endl;
2357 ost <<
"b_" << rk - 6 + 1 << endl;
2363 Combi.
k2ij(rk, i, j, 6);
2364 ost <<
"c_{" << i + 1 << j + 1 <<
"}";
2372 ost <<
"The Schlaefli labeling of lines:\\\\" << endl;
2373 ost <<
"$$" << endl;
2374 for (j = 0; j < 3; j++) {
2375 ost <<
"\\begin{array}{|r|r|}" << endl;
2376 ost <<
"\\hline" << endl;
2377 ost <<
"h & \\mbox{line} \\\\" << endl;
2378 ost <<
"\\hline" << endl;
2379 ost <<
"\\hline" << endl;
2380 for (h = 0; h < 9; h++) {
2381 ost << j * 9 + h <<
" & "
2384 ost <<
"\\hline" << endl;
2385 ost <<
"\\end{array}" << endl;
2387 ost <<
"\\qquad" << endl;
2390 ost <<
"$$" << endl;
2398 for (i = 0; i < len; i++) {
2409 int e, line, j, l1, l2, t1, t2, t3, t4, c1, c2, cnt;
2411 int transversal_line;
2421 for (line = 0; line < 3; line++) {
2423 transversal_line = three_lines[line];
2425 c1 = three_lines[1];
2426 c2 = three_lines[2];
2428 else if (line == 1) {
2429 c1 = three_lines[0];
2430 c2 = three_lines[2];
2432 else if (line == 2) {
2433 c1 = three_lines[0];
2434 c2 = three_lines[1];
2437 for (l1 = 0; l1 < 27; l1++) {
2438 if (l1 == c1 || l1 == c2) {
2442 transversal_line, l1) == 0) {
2445 for (l2 = l1 + 1; l2 < 27; l2++) {
2446 if (l2 == c1 || l2 == c2) {
2450 transversal_line, l2) == 0) {
2456 cout <<
"e=" << e << endl;
2457 cout <<
"transversal_line=" << transversal_line << endl;
2458 cout <<
"c1=" << c1 << endl;
2459 cout <<
"c2=" << c2 << endl;
2460 cout <<
"l1=" << l1 << endl;
2461 cout <<
"l2=" << l2 << endl;
2463 for (t1 = 0; t1 < 27; t1++) {
2464 if (t1 == three_lines[0] ||
2465 t1 == three_lines[1] ||
2466 t1 == three_lines[2]) {
2469 if (t1 == l1 || t1 == l2) {
2476 cout <<
"t1=" << t1 << endl;
2478 for (t2 = t1 + 1; t2 < 27; t2++) {
2479 if (t2 == three_lines[0] ||
2480 t2 == three_lines[1] ||
2481 t2 == three_lines[2]) {
2484 if (t2 == l1 || t2 == l2) {
2491 cout <<
"t2=" << t2 << endl;
2493 for (t3 = t2 + 1; t3 < 27; t3++) {
2494 if (t3 == three_lines[0] ||
2495 t3 == three_lines[1] ||
2496 t3 == three_lines[2]) {
2499 if (t3 == l1 || t3 == l2) {
2506 cout <<
"t3=" << t3 << endl;
2508 for (t4 = t3 + 1; t4 < 27; t4++) {
2509 if (t4 == three_lines[0] ||
2510 t4 == three_lines[1] ||
2511 t4 == three_lines[2]) {
2514 if (t4 == l1 || t4 == l2) {
2521 cout <<
"t4=" << t4 << endl;
2551 cout <<
"n1=" << n1 << endl;
2552 cout <<
"n2=" << n2 << endl;
2554 ost << cnt <<
" : $\\pi_{" << e <<
"} = \\pi_{";
2556 ost <<
"}$, $\\;$ ";
2560 for (j = 0; j < 3; j++) {
2561 ost << Line_label_tex[three_lines[j]];
2563 ost <<
"$, $\\;$ " << endl;
2572 ost <<
"$(" << Line_label_tex[t1]
2573 <<
"," << Line_label_tex[t2]
2574 <<
"," << Line_label_tex[t3]
2575 <<
"," << Line_label_tex[t4]
2580 for (j = 0; j < n1; j++) {
2589 for (j = 0; j < n2; j++) {
2596 ost <<
"\\\\" << endl;
2609 ost <<
"\\bigskip" << endl;
2621 for (i = 0; i < 72; i++) {
2623 for (j = 0; j < 6; j++) {
2631 cout <<
"," << endl;
2634 cout <<
"];" << endl;
2639 int f_v = (verbose_level >= 1);
2646 cout <<
"schlaefli::identify_Eckardt_point" << endl;
2657 cout <<
"schlaefli::identify_Eckardt_point line1 < 6 and line2 < 6" << endl;
2663 int i, j, k, l, m, n;
2666 cout <<
"schlaefli::identify_Eckardt_point second case, line1 < 12" << endl;
2670 cout <<
"schlaefli::identify_Eckardt_point second case, line2 < 12" << endl;
2674 cout <<
"schlaefli::identify_Eckardt_point second case, line3 < 12" << endl;
2677 Combi.
k2ij(line1 - 12, i, j, 6);
2678 Combi.
k2ij(line2 - 12, k, l, 6);
2679 Combi.
k2ij(line3 - 12, m, n, 6);
2683 cout <<
"schlaefli::identify_Eckardt_point done" << endl;
Eckardt point on a cubic surface using the Schlaefli labeling.
void init_by_rank(int rk)
void latex_to_str_without_E(char *str)
void init3(int ij, int kl, int mn)
void three_lines(surface_domain *S, int *three_lines)
void latex_index_only(std::ostream &ost)
void latex(std::ostream &ost)
schlaefli labeling of objects in cubic surfaces with 27 lines
std::string * Line_label_tex
void init(int verbose_level)
void print_trihedral_pairs(std::ostream &ost)
int type_of_line(int line)
void latex_table_of_Schlaefli_labeling_of_lines(std::ostream &ost)
void create_half_double_sixes(int verbose_level)
void latex_table_of_double_sixes(std::ostream &ost)
void latex_abstract_trihedral_pair(std::ostream &ost, int t_idx)
int * incidence_lines_vs_tritangent_planes
void find_trihedral_pairs_from_collinear_triples_of_Eckardt_points(int *E_idx, int nb_E, int *&T_idx, int &nb_T, int verbose_level)
void make_Eckardt_points(int verbose_level)
int find_half_double_six(long int *half_double_six)
long int * Half_double_sixes
int nb_collinear_Eckardt_triples
std::string * Eckard_point_label_tex
int choose_tritangent_plane_for_Clebsch_map(int line_a, int line_b, int transversal_line, int verbose_level)
void make_Tijk(int *T, int i, int j, int k)
void print_set_of_lines_tex(std::ostream &ost, long int *v, int len)
int * collinear_Eckardt_triples_rank
void latex_table_of_clebsch_maps(std::ostream &ost)
int * Trihedral_pairs_col_sets
void init_collinear_Eckardt_triples(int verbose_level)
int third_line_in_tritangent_plane(int l1, int l2, int verbose_level)
int * Half_double_six_to_double_six
void init_adjacency_matrix_of_lines(int verbose_level)
data_structures::tally * Classify_collinear_Eckardt_triples
void find_tritangent_planes_intersecting_in_a_line(int line_idx, int &plane1, int &plane2, int verbose_level)
void latex_triads(std::ostream &ost)
int nb_trihedral_to_Eckardt
void make_trihedral_pair_disjointness_graph(int *&Adj, int verbose_level)
int Eckardt_point_from_tritangent_plane(int *tritangent_plane)
std::string * Double_six_label_tex
long int * Lines_in_tritangent_planes
int * Half_double_six_to_double_six_row
long int * Trihedral_to_Eckardt
data_structures::tally * Classify_trihedral_pairs_row_values
eckardt_point * Eckardt_points
std::string * Trihedral_pair_labels
void print_Steiner_and_Eckardt(std::ostream &ost)
void make_Tlmnp(int *T, int l, int m, int n, int p)
void set_adjacency_matrix_of_lines(int i, int j)
data_structures::tally * Classify_trihedral_pairs_col_values
void ijkl2mn(int i, int j, int k, int l, int &m, int &n)
void make_trihedral_pairs(int verbose_level)
void make_Tdefght(int *T, int d, int e, int f, int g, int h, int t)
void ij2klmn(int i, int j, int &k, int &l, int &m, int &n)
void print_Schlaefli_labelling(std::ostream &ost)
void latex_table_of_tritangent_planes(std::ostream &ost)
void latex_trihedral_pair(std::ostream &ost, int *T, long int *TE)
void latex_half_double_six(std::ostream &ost, int idx)
void make_triads(int verbose_level)
void ijklm2n(int i, int j, int k, int l, int m, int &n)
int get_adjacency_matrix_of_lines(int i, int j)
void get_half_double_six_associated_with_Clebsch_map(int line1, int line2, int transversal, int hds[6], int verbose_level)
void index_of_line(int line, int &i, int &j)
void init(surface_domain *Surf, int verbose_level)
int line_cij(int i, int j)
std::string * Eckard_point_label
void init_Trihedral_to_Eckardt(int verbose_level)
int * adjacency_matrix_of_lines
void latex_table_of_half_double_sixes(std::ostream &ost)
void print_half_double_sixes_in_GAP()
int * Trihedral_pairs_row_sets
std::string * Half_double_six_label_tex
void latex_table_of_trihedral_pairs(std::ostream &ost)
schlaefli_labels * Labels
void init_incidence_matrix_of_lines_vs_tritangent_planes(int verbose_level)
void init_double_sixes(int verbose_level)
void prepare_clebsch_map(int ds, int ds_row, int &line1, int &line2, int &transversal, int verbose_level)
void latex_table_of_Eckardt_points(std::ostream &ost)
int identify_Eckardt_point(int line1, int line2, int line3, int verbose_level)
void process_trihedral_pairs(int verbose_level)
void print_line(std::ostream &ost, int rk)
void ijk2lmn(int i, int j, int k, int &l, int &m, int &n)
cubic surfaces in PG(3,q) with 27 lines
a collection of combinatorial functions
int unordered_triple_pair_rank(int i, int j, int k, int l, int m, int n)
void unrank_k_subset(int rk, int *set, int n, int k)
int rank_k_subset(int *set, int n, int k)
void k2ij(int k, int &i, int &j, int n)
int ordered_pair_rank(int i, int j, int n)
void set_complement_safe(int *subset, int subset_size, int *complement, int &size_complement, int universal_set_size)
long int int_n_choose_k(int n, int k)
void set_complement(int *subset, int subset_size, int *complement, int &size_complement, int universal_set_size)
int ij2k(int i, int j, int n)
void zero(long int *v, long int len)
a collection of functions related to sorted vectors
int int_vec_search(int *v, int len, int a, int &idx)
void int_vec_heapsort(int *v, int len)
int lint_vec_compare(long int *p, long int *q, int len)
int int_vecs_are_disjoint(int *v1, int len1, int *v2, int len2)
int int_vec_search_linear(int *v, int len, int a, int &idx)
void lint_vec_heapsort(long int *v, int len)
a statistical analysis of data consisting of single integers
void init(int *data, int data_length, int f_second, int verbose_level)
void print_naked(int f_backwards)
int * second_sorting_perm_inv
interface to create latex output files
void print_lint_matrix_with_standard_labels(std::ostream &ost, long int *p, int m, int n, int f_tex)
void print_integer_matrix_with_standard_labels(std::ostream &ost, int *p, int m, int n, int f_tex)
void print_integer_matrix_with_standard_labels_and_offset(std::ostream &ost, int *p, int m, int n, int m_offset, int n_offset, int f_tex)
data_structures::lint_vec * Lint_vec
#define Lint_vec_copy(A, B, C)
#define Int_vec_zero(A, B)
#define NEW_OBJECTS(type, n)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects