19namespace layer1_foundations {
20namespace algebraic_geometry {
23#define MAX_NUMBER_OF_PLANES_FOR_PLANE_TYPE 100000
235 int f_v = (verbose_level >= 1);
238 cout <<
"surface_object_properties::init" << endl;
247 cout <<
"surface_object_properties::init "
248 "before compute_tritangent_planes_by_rank" << endl;
252 cout <<
"surface_object_properties::init "
253 "after compute_tritangent_planes_by_rank" << endl;
257 cout <<
"surface_object_properties::init "
258 "before compute_Lines_in_tritangent_planes" << endl;
262 cout <<
"surface_object_properties::init "
263 "after compute_Lines_in_tritangent_planes" << endl;
267 cout <<
"surface_object_properties::init "
268 "before compute_Trihedral_pairs_as_tritangent_planes" << endl;
272 cout <<
"surface_object_properties::init "
273 "after compute_Trihedral_pairs_as_tritangent_planes" << endl;
279 cout <<
"surface_object_properties::init "
280 "before compute_adjacency_matrix_of_line_intersection_graph" << endl;
284 cout <<
"surface_object_properties::init "
285 "after compute_adjacency_matrix_of_line_intersection_graph" << endl;
290 cout <<
"surface_object_properties::init before compute_properties" << endl;
294 cout <<
"surface_object_properties::init after compute_properties" << endl;
299 cout <<
"surface_object_properties::init done" << endl;
305 int f_v = (verbose_level >= 1);
306 int f_vvv = (verbose_level >= 3);
311 cout <<
"surface_object_properties::compute_properties" << endl;
316 if (
SO->
Pts == NULL) {
318 cout <<
"surface_object_properties::compute_properties SO->Pts == NULL" << endl;
326 cout <<
"surface_object::compute_properties we found "
327 <<
SO->
nb_pts <<
" points on the surface" << endl;
330 cout <<
"surface_object_properties::compute_properties The points "
331 "on the surface are:" << endl;
338 cout <<
"surface_object::compute_properties before compute_singular_points_and_tangent_planes" << endl;
342 cout <<
"surface_object::compute_properties after compute_singular_points_and_tangent_planes" << endl;
348 cout <<
"surface_object_properties::compute_properties before "
349 "Surf->compute_points_on_lines" << endl;
357 cout <<
"surface_object_properties::compute_properties after "
358 "Surf->compute_points_on_lines" << endl;
364 cout <<
"surface_object::compute_properties pts_on_lines:" << endl;
372 cout <<
"points on lines:" << endl;
379 cout <<
"surface_object::compute_properties lines_on_point:" << endl;
387 cout <<
"surface_object::compute_properties type of lines_on_point:" << endl;
393 cout <<
"surface_object::compute_properties computing Eckardt points:" << endl;
399 cout <<
"surface_object::compute_properties computing Eckardt points done, we found "
403 cout <<
"surface_object::compute_properties Eckardt_points_index=";
411 cout <<
"surface_object::compute_properties computing Eckardt points done, we found "
415 cout <<
"surface_object::compute_properties Eckardt_points=";
422 int p, a, b, c, idx, i;
430 cout <<
"surface_object::compute_properties Eckardt point is not on three lines" << endl;
450 cout <<
"surface_object::compute_properties computing axes:" << endl;
454 cout <<
"surface_object::compute_properties computing axes done" << endl;
466 cout <<
"computing Double points:" << endl;
472 cout <<
"computing Double points done, we found "
476 cout <<
"Double_points_index=";
484 cout <<
"computing Double points done, we found "
488 cout <<
"Double_points=";
500 cout <<
"computing Single points:" << endl;
506 cout <<
"computing Single points done, we found "
510 cout <<
"Single_points_index=";
518 cout <<
"computing Single points done, we found "
522 cout <<
"Single_points=";
540 int i, j, a, b, idx, h;
567 cout <<
"surface_object_properties::compute_properties computing line type" << endl;
572 cout <<
"surface_object_properties::compute_properties computing line type done" << endl;
575 cout <<
"surface_object_properties::compute_properties computing plane type" << endl;
582 cout <<
"surface_object_properties::compute_properties computing plane type done" << endl;
615 cout <<
"surface_object_properties::compute_properties done" << endl;
621 int f_v = (verbose_level >= 1);
625 cout <<
"surface_object_properties::compute_axes" << endl;
631 for (i = 0; i < 2; i++) {
632 for (h = 0; h < 3; h++) {
647 cout <<
"we found " <<
nb_axes <<
" axes" << endl;
650 cout <<
"surface_object_properties::compute_axes done" << endl;
656 int f_v = (verbose_level >= 1);
659 cout <<
"surface_object_properties::compute_gradient" << endl;
664 cout <<
"surface_object_properties::compute_gradient SO->Surf->Poly2_4->get_nb_monomials() = " <<
SO->
Surf->
Poly2_4->
get_nb_monomials() << endl;
670 cout <<
"surface_object_properties::compute_gradient done" << endl;
680 int f_v = (verbose_level >= 1);
684 cout <<
"surface_object_properties::compute_singular_points_and_tangent_planes" << endl;
694 cout <<
"surface_object_properties::compute_singular_points_and_tangent_planes before compute_gradient" << endl;
698 cout <<
"surface_object_properties::compute_singular_points_and_tangent_planes after compute_gradient" << endl;
709 cout <<
"surface_object_properties::compute_singular_points_and_tangent_planes "
710 "h=" << h <<
" / " <<
SO->
nb_pts << endl;
714 cout <<
"surface_object_properties::compute_singular_points_and_tangent_planes "
719 cout <<
"surface_object_properties::compute_singular_points_and_tangent_planes "
724 for (i = 0; i < nb_eqns; i++) {
726 cout <<
"surface_object_properties::compute_singular_points_and_tangent_planes "
727 "gradient i=" << i <<
" / " << nb_eqns << endl;
730 cout <<
"surface_object_properties::compute_singular_points_and_tangent_planes "
731 "gradient " << i <<
" = ";
740 cout <<
"surface_object_properties::compute_singular_points_and_tangent_planes "
741 "value = " << w[i] << endl;
744 for (i = 0; i < nb_eqns; i++) {
768 int nb_tangent_planes;
775 string fname_tangents;
778 fname_tangents.assign(
"tangents.txt");
780 Fio.write_set_to_file_lint(fname_tangents,
784 cout <<
"Written file " << fname_tangents <<
" of size " << Fio.file_size(fname_tangents) << endl;
805 cout <<
"The system has rank " << r << endl;
806 cout <<
"The ideal has dimension " << ns << endl;
808 cout <<
"and is generated by:" << endl;
810 cout <<
"corresponding to the following basis "
811 "of polynomials:" << endl;
812 for (h = 0; h < ns; h++) {
825 cout <<
"surface_object_properties::compute_singular_points_and_tangent_planes done" << endl;
832 int f_v = (verbose_level >= 1);
835 cout <<
"surface_object_properties::compute_adjacency_matrix_of_line_intersection_graph" << endl;
839 cout <<
"surface_object_properties::compute_adjacency_matrix_of_"
840 "line_intersection_graph before Surf->compute_adjacency_"
841 "matrix_of_line_intersection_graph" << endl;
846 cout <<
"surface_object_properties::compute_adjacency_matrix_of_"
847 "line_intersection_graph after Surf->compute_adjacency_"
848 "matrix_of_line_intersection_graph" << endl;
856 cout <<
"surface_object_properties::compute_adjacency_matrix_of_"
857 "line_intersection_graph before Surf->compute_"
858 "intersection_points_and_indices" << endl;
867 cout <<
"surface_object_properties::compute_adjacency_matrix_of_"
868 "line_intersection_graph after Surf->compute_"
869 "intersection_points_and_indices" << endl;
878 cout <<
"surface_object_properties::compute_adjacency_matrix_of_line_intersection_graph done" << endl;
890 int f_v = (verbose_level >= 1);
893 cout <<
"surface_object_properties::compute_plane_type_by_points" << endl;
909 cout <<
"plane types by points: ";
915 cout <<
"surface_object_properties::compute_plane_type_by_points "
916 "too many planes, skipping plane type " << endl;
921 cout <<
"surface_object_properties::compute_plane_type_by_points done" << endl;
928 int f_v = (verbose_level >= 1);
929 int f_vv = (verbose_level >= 2);
932 cout <<
"surface_object_properties::compute_tritangent_planes_by_rank" << endl;
937 cout <<
"surface_object_properties::compute_tritangent_planes_by_rank "
938 "SO->nb_lines != 27 we don't compute the tritangent planes" << endl;
948 int tritangent_plane_idx;
949 int three_lines_idx[3];
950 long int three_lines[3];
955 for (tritangent_plane_idx = 0;
956 tritangent_plane_idx < 45;
957 tritangent_plane_idx++) {
959 SO->
Surf, three_lines_idx);
961 for (i = 0; i < 3; i++) {
962 three_lines[i] =
SO->
Lines[three_lines_idx[i]];
969 cout <<
"surface_object_properties::compute_tritangent_planes_by_rank r != 3" << endl;
976 cout <<
"surface_object_properties::compute_tritangent_planes_by_rank" << endl;
977 for (tritangent_plane_idx = 0;
978 tritangent_plane_idx < 45;
979 tritangent_plane_idx++) {
980 cout << tritangent_plane_idx <<
" : " <<
Tritangent_plane_rk[tritangent_plane_idx] << endl;
984 cout <<
"surface_object_properties::compute_tritangent_planes_by_rank done" << endl;
991 int f_v = (verbose_level >= 1);
992 int tritangent_plane_idx, j;
995 cout <<
"surface_object_properties::compute_Lines_in_tritangent_planes" << endl;
998 for (tritangent_plane_idx = 0;
999 tritangent_plane_idx < 45;
1000 tritangent_plane_idx++) {
1001 for (j = 0; j < 3; j++) {
1008 cout <<
"surface_object_properties::compute_Lines_in_tritangent_planes done" << endl;
1014 int f_v = (verbose_level >= 1);
1018 cout <<
"surface_object_properties::compute_Trihedral_pairs_as_tritangent_planes" << endl;
1021 for (i = 0; i < 120; i++) {
1022 for (j = 0; j < 6; j++) {
1029 cout <<
"surface_object_properties::compute_Trihedral_pairs_as_tritangent_planes done" << endl;
1035 int f_v = (verbose_level >= 1);
1039 cout <<
"surface_object_properties::compute_planes_and_dual_point_ranks" << endl;
1053 for (j = 0; j < 6; j++) {
1061 cout <<
"surface_object_properties::compute_planes_and_dual_point_ranks done" << endl;
1070 int f_v = (verbose_level >= 1);
1073 cout <<
"surface_object_properties::print_everything" << endl;
1077 cout <<
"surface_object_properties::print_everything before print_equation" << endl;
1081 cout <<
"surface_object_properties::print_everything after print_equation" << endl;
1085 cout <<
"surface_object_properties::print_everything "
1086 "before print_general" << endl;
1092 cout <<
"surface_object_properties::print_everything "
1093 "before print_lines" << endl;
1099 cout <<
"surface_object_properties::print_everything "
1100 "before print_points" << endl;
1106 cout <<
"surface_object_properties::print_everything "
1107 "before print_lines_with_points_on_them" << endl;
1114 cout <<
"surface_object_properties::print_everything "
1115 "before SO->print_line_intersection_graph" << endl;
1120 cout <<
"surface_object_properties::print_everything "
1121 "before print_adjacency_matrix_with_intersection_points" << endl;
1127 cout <<
"surface_object_properties::print_everything "
1128 "before print_neighbor_sets" << endl;
1133 cout <<
"surface_object_properties::print_everything "
1134 "before print_tritangent_planes" << endl;
1143 cout <<
"surface_object_properties::print_everything "
1144 "before print_generalized_quadrangle" << endl;
1146 print_generalized_quadrangle(ost);
1150 cout <<
"surface_object_properties::print_everything "
1151 "before print_double sixes" << endl;
1156 cout <<
"surface_object_properties::print_everything "
1157 "before print_trihedral_pairs" << endl;
1161 cout <<
"surface_object_properties::print_everything "
1162 "before print_half_double_sixes" << endl;
1167 cout <<
"surface_object_properties::print_everything "
1168 "before print_half_double_sixes_numerically" << endl;
1173 cout <<
"surface_object_properties::print_everything "
1174 "before print_trihedral_pairs" << endl;
1180 cout <<
"surface_object_properties::print_everything "
1181 "before print_trihedral_pairs_numerically" << endl;
1187 cout <<
"surface_object_properties::print_everything done" << endl;
1195 int f_v = (verbose_level >= 1);
1198 cout <<
"surface_object_properties::report_properties" << endl;
1202 cout <<
"surface_object_properties::report_properties_simple before print_equation" << endl;
1207 cout <<
"surface_object_properties::report_properties before print_general" << endl;
1213 cout <<
"surface_object_properties::report_properties before print_lines" << endl;
1218 cout <<
"surface_object_properties::report_properties before print_points" << endl;
1224 cout <<
"surface_object_properties::report_properties print_tritangent_planes" << endl;
1230 cout <<
"surface_object_properties::report_properties "
1231 "before print_Steiner_and_Eckardt" << endl;
1239 cout <<
"surface_object_properties::report_properties "
1240 "before print_generalized_quadrangle" << endl;
1242 print_generalized_quadrangle(ost);
1246 cout <<
"surface_object_properties::report_properties "
1247 "before print_line_intersection_graph" << endl;
1252 cout <<
"surface_object_properties::report_properties done" << endl;
1258 int f_v = (verbose_level >= 1);
1261 cout <<
"surface_object_properties::report_properties_simple" << endl;
1266 cout <<
"surface_object_properties::report_properties_simple before print_equation" << endl;
1271 cout <<
"surface_object_properties::report_properties_simple before print_general" << endl;
1278 ost <<
"\\subsubsection*{Singular Points}" << endl;
1279 cout <<
"surface_object_properties::print_points before print_singular_points" << endl;
1284 cout <<
"surface_object_properties::report_properties_simple before print_lines" << endl;
1289 ost <<
"\\subsubsection*{Eckardt Points}" << endl;
1290 cout <<
"surface_object_properties::print_points before print_Eckardt_points" << endl;
1293 ost <<
"\\subsubsection*{Double Points}" << endl;
1294 cout <<
"surface_object_properties::print_points before print_double_points" << endl;
1298 ost <<
"\\subsubsection*{Single Points}" << endl;
1299 cout <<
"surface_object_properties::print_points before print_single_points" << endl;
1306 ost <<
"\\subsubsection*{Points on surface but on no line}" << endl;
1307 cout <<
"surface_object_properties::print_points before print_points_on_surface_but_not_on_a_line" << endl;
1312 cout <<
"surface_object_properties::report_properties_simple print_Hesse_planes" << endl;
1317 cout <<
"surface_object_properties::report_properties_simple print_axes" << endl;
1323 cout <<
"surface_object_properties::report_properties_simple print_tritangent_planes" << endl;
1329 cout <<
"surface_object_properties::report_properties_simple "
1330 "before print_Steiner_and_Eckardt" << endl;
1339 cout <<
"surface_object_properties::report_properties_simple "
1340 "before print_generalized_quadrangle" << endl;
1342 print_generalized_quadrangle(ost);
1346 cout <<
"surface_object_properties::report_properties_simple "
1347 "before print_line_intersection_graph" << endl;
1352 cout <<
"surface_object_properties::report_properties_simple done" << endl;
1357 cout <<
"surface_object_properties::report_properties_simple before print_all_points_on_surface" << endl;
1366 ost <<
"\\subsection*{Line Intersection Graph}" << endl;
1389 ost <<
"{\\arraycolsep=1pt" << endl;
1391 ost <<
"$$" << endl;
1392 ost <<
"\\begin{array}{rr|l|l}" << endl;
1393 ost <<
" & & \\mbox{intersecting} & \\mbox{non-intersecting}";
1394 ost <<
"\\\\" << endl;
1395 ost <<
"\\hline" << endl;
1396 for (i = 0; i < m; i++) {
1406 for (j = 0; j < n; j++) {
1411 for (j = 0; j < h; j++) {
1424 for (j = 0; j < n; j++) {
1425 if (p[i * n + j] == 0) {
1429 for (j = 0; j < h; j++) {
1443 ost <<
"\\end{array}" << endl;
1444 ost <<
"$$" << endl;
1445 ost <<
"}%%" << endl;
1450 ost <<
"Too many lines to print.\\\\" << endl;
1465 ost <<
"{\\arraycolsep=1pt" << endl;
1466 ost <<
"$$" << endl;
1467 ost <<
"\\begin{array}{rr|*{" << n <<
"}r}" << endl;
1469 for (j = 0; j < n; j++) {
1472 ost <<
"\\\\" << endl;
1475 for (j = 0; j < n; j++) {
1478 ost <<
"\\\\" << endl;
1480 ost <<
"\\hline" << endl;
1481 for (i = 0; i < m; i++) {
1486 for (j = 0; j < n; j++) {
1487 ost <<
" & " << p[i * n + j];
1492 ost <<
"\\end{array}" << endl;
1493 ost <<
"$$" << endl;
1494 ost <<
"}%%" << endl;
1497 ost <<
"Too many lines to print.\\\\" << endl;
1506 int i, j, m, n, idx;
1512 ost <<
"{\\arraycolsep=1pt" << endl;
1513 ost <<
"$$" << endl;
1514 ost <<
"\\begin{array}{rr|*{" << n <<
"}r}" << endl;
1516 for (j = 0; j < n; j++) {
1519 ost <<
"\\\\" << endl;
1523 for (j = 0; j < n; j++) {
1526 ost <<
"\\\\" << endl;
1528 ost <<
"\\hline" << endl;
1529 for (i = 0; i < m; i++) {
1537 for (j = 0; j < n; j++) {
1542 ost <<
"P_{" << idx <<
"}";
1551 ost <<
"\\end{array}" << endl;
1552 ost <<
"$$" << endl;
1553 ost <<
"}%%" << endl;
1556 ost <<
"Too many lines to print.\\\\" << endl;
1566 ost <<
"Neighbor sets in the line intersection graph:\\\\" << endl;
1570 ost <<
"Line " << i <<
" intersects " << endl;
1571 ost <<
"$$" << endl;
1572 ost <<
"\\begin{array}{|r*{"
1576 ost <<
"\\hline" << endl;
1577 ost <<
"\\mbox{Line} ";
1580 ost <<
" & " <<
"\\ell_{" << j <<
"}";
1582 ost <<
"\\\\" << endl;
1583 ost <<
"\\hline" << endl;
1584 ost <<
"\\mbox{in point} ";
1591 cout <<
"surface_object::print_line_intersection_graph "
1592 "did not find intersection point" << endl;
1595 ost <<
" & " << idx;
1597 ost <<
" & " <<
"P_{" << p <<
"}";
1600 ost <<
"\\\\" << endl;
1601 ost <<
"\\hline" << endl;
1602 ost <<
"\\end{array}" << endl;
1603 ost <<
"$$" << endl;
1607 ost <<
"Too many lines to print.\\\\" << endl;
1615 ost <<
"\\clearpage\n\\subsection*{All planes "
1616 "in trihedral pairs}" << endl;
1618 ost <<
"All planes by plane rank:" << endl;
1620 ost <<
"$$" << endl;
1623 ost <<
"\\;\\;" << endl;
1626 ost <<
"$$" << endl;
1627 ost <<
"$$" << endl;
1630 ost <<
"\\;\\;" << endl;
1633 ost <<
"$$" << endl;
1637 ost <<
"All planes by dual point rank:" << endl;
1638 ost <<
"$$" << endl;
1641 ost <<
"\\;\\;" << endl;
1644 ost <<
"$$" << endl;
1645 ost <<
"$$" << endl;
1648 ost <<
"\\;\\;" << endl;
1651 ost <<
"$$" << endl;
1661 ost <<
"\\subsection*{Tritangent planes}" << endl;
1663 "planes are:\\\\" << endl;
1669 ost <<
"$$" << endl;
1670 print_integer_matrix_with_standard_labels(ost,
1671 Tritangent_planes, 9, 5,
TRUE );
1672 ost <<
"$$" << endl;
1673 ost <<
"Their dual point ranks are:" << endl;
1674 ost <<
"$$" << endl;
1675 print_integer_matrix_with_standard_labels(ost,
1676 Tritangent_plane_dual, 9, 5,
TRUE );
1677 ost <<
"$$" << endl;
1680 a = Tritangent_planes[i];
1681 b = Tritangent_plane_dual[i];
1684 <<
" : rank " << a <<
" is $";
1685 ost <<
"\\left[" << endl;
1686 Surf->Gr3->print_single_generator_matrix_tex(ost, a);
1687 ost <<
"\\right]" << endl;
1688 ost <<
"$, dual pt rank = $" << b <<
"$ ";
1689 PG_element_unrank_modified(*F, v4, 1, 4, b);
1691 int_vec_print(ost, v4, 4);
1692 ost <<
"$\\\\" << endl;
1695 ost <<
"The iso types of the tritangent planes are:" << endl;
1696 ost <<
"$$" << endl;
1697 print_integer_matrix_with_standard_labels(ost,
1700 ost <<
"$$" << endl;
1702 ost <<
"Type iso of tritangent planes: ";
1703 ost <<
"$$" << endl;
1704 Type_iso_tritangent_planes->print_naked_tex(ost,
TRUE);
1706 ost <<
"$$" << endl;
1709 ost <<
"Tritangent\\_plane\\_to\\_Eckardt:" << endl;
1710 ost <<
"$$" << endl;
1711 print_integer_matrix_with_standard_labels(ost,
1714 ost <<
"$$" << endl;
1715 ost <<
"Eckardt\\_to\\_Tritangent\\_plane:" << endl;
1716 ost <<
"$$" << endl;
1717 print_integer_matrix_with_standard_labels(ost,
1720 ost <<
"$$" << endl;
1722 ost <<
"Trihedral\\_pairs\\_as\\_tritangent\\_planes:" << endl;
1723 ost <<
"$$" << endl;
1724 print_integer_matrix_with_standard_labels(ost,
1726 ost <<
"\\;\\;" << endl;
1727 print_integer_matrix_with_standard_labels_and_offset(ost,
1730 ost <<
"$$" << endl;
1731 ost <<
"$$" << endl;
1732 print_integer_matrix_with_standard_labels_and_offset(ost,
1735 ost <<
"\\;\\;" << endl;
1736 print_integer_matrix_with_standard_labels_and_offset(ost,
1739 ost <<
"$$" << endl;
1746 long int plane_rk, b;
1751 j = Eckardt_to_Tritangent_plane[plane_idx];
1752 plane_rk = Tritangent_planes[j];
1753 b = Tritangent_plane_dual[j];
1759 ost <<
"$$" << endl;
1761 ost <<
"\\pi_{" << plane_idx <<
"} = " << plane_rk <<
" = ";
1771 ost <<
"$$" << endl;
1772 ost <<
"$$" << endl;
1773 ost <<
"=V\\big(" << endl;
1775 ost <<
"\\big)" << endl;
1776 ost <<
"=V\\big(" << endl;
1778 ost <<
"\\big)" << endl;
1779 ost <<
"$$" << endl;
1780 ost <<
"dual pt rank = $" << b <<
"$ ";
1784 ost <<
"$.\\\\" << endl;
1791 ost <<
"\\subsection*{Plane types by points}" << endl;
1796 ost <<
"\\\\" << endl;
1801 ost <<
"\\subsection*{The " <<
SO->
nb_lines <<
" Lines}" << endl;
1809 ost <<
"\\subsection*{The " <<
SO->
nb_lines <<
" lines with points on them}" << endl;
1817 ost <<
"$$" << endl;
1818 ost <<
"\\ell_{" << i <<
"} ";
1822 ost <<
" = \\left[" << endl;
1826 ost <<
"\\right]_{" <<
SO->
Lines[i] <<
"}" << endl;
1827 ost <<
"$$" << endl;
1828 ost <<
"which contains the point set " << endl;
1829 ost <<
"$$" << endl;
1830 ost <<
"\\{ P_{i} \\mid i \\in ";
1833 ost <<
"\\}." << endl;
1834 ost <<
"$$" << endl;
1837 std::vector<long int> plane_ranks;
1844 ost <<
"The tangent planes associated with the points on this line are:\\\\" << endl;
1850 ost << j <<
" : " << pt <<
" : ";
1855 ost <<
" is singular\\\\" << endl;
1861 ost <<
"The planes in the pencil through the line are:\\\\" << endl;
1862 for (j = 0; j < plane_ranks.size(); j++) {
1863 ost << j <<
" : " << plane_ranks[j] <<
"\\\\" << endl;
1870 ost <<
"Too many to print.\\\\" << endl;
1876 ost <<
"\\subsection*{The equation}" << endl;
1877 ost <<
"The equation of the surface ";
1878 ost <<
" is :" << endl;
1881 ost <<
"$$" << endl;
1883 ost << endl <<
"=0\n$$" << endl;
1888 ost <<
"\\\\" << endl;
1893 ost <<
"The point rank of the equation over GF$(" <<
SO->
F->
q <<
")$ is " << rk <<
"\\\\" << endl;
1902 ost <<
"\\subsection*{General information}" << endl;
1905 ost <<
"{\\renewcommand{\\arraystretch}{1.5}" << endl;
1906 ost <<
"$$" << endl;
1907 ost <<
"\\begin{array}{|l|r|}" << endl;
1908 ost <<
"\\hline" << endl;
1909 ost <<
"\\mbox{Number of lines} & " <<
SO->
nb_lines <<
"\\\\" << endl;
1910 ost <<
"\\hline" << endl;
1911 ost <<
"\\mbox{Number of points} & " <<
SO->
nb_pts <<
"\\\\" << endl;
1912 ost <<
"\\hline" << endl;
1913 ost <<
"\\mbox{Number of singular points} & " <<
nb_singular_pts <<
"\\\\" << endl;
1914 ost <<
"\\hline" << endl;
1915 ost <<
"\\mbox{Number of Eckardt points} & " <<
nb_Eckardt_points <<
"\\\\" << endl;
1916 ost <<
"\\hline" << endl;
1917 ost <<
"\\mbox{Number of double points} & " <<
nb_Double_points <<
"\\\\" << endl;
1918 ost <<
"\\hline" << endl;
1919 ost <<
"\\mbox{Number of single points} & " <<
nb_Single_points <<
"\\\\" << endl;
1920 ost <<
"\\hline" << endl;
1922 ost <<
"\\hline" << endl;
1923 ost <<
"\\mbox{Number of Hesse planes} & " <<
nb_Hesse_planes <<
"\\\\" << endl;
1924 ost <<
"\\hline" << endl;
1925 ost <<
"\\mbox{Number of axes} & " <<
nb_axes <<
"\\\\" << endl;
1926 ost <<
"\\hline" << endl;
1927 ost <<
"\\mbox{Type of points on lines} & ";
1929 ost <<
"\\\\" << endl;
1930 ost <<
"\\hline" << endl;
1931 ost <<
"\\mbox{Type of lines on points} & ";
1933 ost <<
"\\\\" << endl;
1934 ost <<
"\\hline" << endl;
1935 ost <<
"\\end{array}" << endl;
1936 ost <<
"$$}" << endl;
1938 ost <<
"Points on lines:" << endl;
1939 ost <<
"$$" << endl;
1941 ost <<
"$$" << endl;
1942 ost <<
"Lines on points:" << endl;
1943 ost <<
"$$" << endl;
1945 ost <<
"$$" << endl;
1955 ost <<
"\\subsection*{Affine points on surface}" << endl;
1956 ost <<
"\\begin{verbatim}" << endl;
1957 ost <<
"int Pts[] = {" << endl;
1964 for (j = 0; j < 4; j++) {
1965 ost << v[j] <<
", ";
1971 ost <<
"};" << endl;
1972 ost <<
"nb_affine_pts = " << cnt <<
";" << endl;
1973 ost <<
"\\end{verbatim}" << endl;
1978 ost <<
"\\subsection*{All Points on surface}" << endl;
1980 cout <<
"surface_object_properties::print_points before print_points_on_surface" << endl;
1984 ost <<
"\\subsubsection*{Eckardt Points}" << endl;
1985 cout <<
"surface_object_properties::print_points before print_Eckardt_points" << endl;
1988 ost <<
"\\subsubsection*{Singular Points}" << endl;
1989 cout <<
"surface_object_properties::print_points before print_singular_points" << endl;
1992 ost <<
"\\subsubsection*{Double Points}" << endl;
1993 cout <<
"surface_object_properties::print_points before print_double_points" << endl;
1996 ost <<
"\\subsubsection*{Points on lines}" << endl;
1997 cout <<
"surface_object_properties::print_points before print_points_on_lines" << endl;
2000 ost <<
"\\subsubsection*{Points on surface but on no line}" << endl;
2001 cout <<
"surface_object_properties::print_points before print_points_on_surface_but_not_on_a_line" << endl;
2005 ost <<
"\\clearpage" << endl;
2006 ost <<
"\\section*{Lines through points}" << endl;
2014 int i, j, p, a, b, c;
2019 <<
" Eckardt points:\\\\" << endl;
2042 cout <<
"surface_object_properties::print_Eckardt_points Eckardt point is not on three lines" << endl;
2064 for (j = 0; j < 4; j++) {
2072 for (j = 0; j < 4; j++) {
2088 ost <<
"$\\\\" << endl;
2091 cout <<
"Eckardt point is singular. " << endl;
2110 ost <<
"Set of tangent planes: ";
2112 ost <<
"\\\\" << endl;
2118 ost <<
"Line type of Eckardt points: $";
2120 ost <<
"$\\\\" << endl;
2124 ost <<
"Plane type of Eckardt points: $";
2130 T_planes.print_file_tex_we_are_in_math_mode(ost,
TRUE);
2131 ost <<
"$\\\\" << endl;
2146 ost <<
"\\subsection*{Hesse planes}" << endl;
2147 ost <<
"Number of Hesse planes: " <<
nb_Hesse_planes <<
"\\\\" << endl;
2148 ost <<
"Set of Hesse planes: ";
2150 ost <<
"\\\\" << endl;
2156 ost <<
"\\clearpage" << endl;
2160 cout <<
"Hesse plane : rank : Incident Eckardt points\\\\" << endl;
2162 ost <<
"\\noindent" << endl;
2172 cout <<
"too many points on the Hesse plane" << endl;
2179 cout <<
"cnt != 9" << endl;
2184 for (h = 0; h < 9; h++) {
2191 ost <<
"\\\\" << endl;
2196 ost <<
"\\clearpage" << endl;
2200 cout <<
"Hesse plane : rank : Incident Eckardt points\\\\" << endl;
2201 ost <<
"\\noindent" << endl;
2211 cout <<
"too many points on the Hesse plane" << endl;
2218 cout <<
"cnt != 9" << endl;
2223 for (h = 0; h < 9; h++) {
2230 ost <<
"\\\\" << endl;
2238 int i, j, idx, t_idx, t_r, a;
2240 ost <<
"\\subsection*{Axes}" << endl;
2241 ost <<
"Number of axes: " <<
nb_axes <<
"\\\\" << endl;
2242 ost <<
"Axes: \\\\" << endl;
2243 for (i = 0; i <
nb_axes; i++) {
2247 ost << i <<
" : " << idx <<
" = " << t_idx <<
"," << t_r <<
" = " << endl;
2248 for (j = 0; j < 3; j++) {
2255 ost <<
"\\\\" << endl;
2267 <<
" singular points:\\\\" << endl;
2274 ost <<
"\\begin{multicols}{2}" << endl;
2276 ost <<
"\\noindent" << endl;
2280 ost << i <<
" : $P_{" << p <<
"}=\\bP(";
2282 for (j = 0; j < 4; j++) {
2290 for (j = 0; j < 4; j++) {
2298 ost <<
"$\\\\" << endl;
2301 ost <<
"\\end{multicols}" << endl;
2314 <<
" Double points:\\\\" << endl;
2318 ost <<
"$$" << endl;
2322 ost <<
"$$" << endl;
2324 ost <<
"$$" << endl;
2328 ost <<
"$$" << endl;
2333 ost <<
"The Double points on the surface are:\\\\" << endl;
2334 ost <<
"\\begin{multicols}{2}" << endl;
2335 ost <<
"\\noindent" << endl;
2341 int_vec_print_fully(ost, v, 4);
2342 ost <<
"$\\\\" << endl;
2344 ost <<
"\\end{multicols}" << endl;
2347 ost <<
"The double points on the surface are:\\\\" << endl;
2368 ost <<
"\\begin{multicols}{2}" << endl;
2369 ost <<
"\\noindent" << endl;
2378 ost <<
"$P_{" <<
SO->
Pts[p] <<
"}";
2385 ost <<
"\\ell_{" << a <<
"} \\cap ";
2386 ost <<
"\\ell_{" << b <<
"} ";
2393 ost <<
"\\ell_{" << a <<
"} \\cap ";
2394 ost <<
"\\ell_{" << b <<
"} ";
2396 ost <<
"$\\\\" << endl;
2399 ost <<
"\\end{multicols}" << endl;
2404 ost <<
"Too many to print.\\\\" << endl;
2416 <<
" single points:\\\\" << endl;
2420 ost <<
"$$" << endl;
2424 ost <<
"$$" << endl;
2425 ost <<
"$$" << endl;
2429 ost <<
"$$" << endl;
2433 ost <<
"The single points on the surface are:\\\\" << endl;
2434 ost <<
"\\begin{multicols}{2}" << endl;
2435 ost <<
"\\noindent" << endl;
2449 ost <<
" lies on line $\\ell_{" << a <<
"}$";
2451 ost <<
"\\\\" << endl;
2453 ost <<
"\\end{multicols}" << endl;
2454 ost <<
"The single points on the surface are:\\\\" << endl;
2458 ost <<
"Too many to print.\\\\" << endl;
2469 ost <<
"The surface has " <<
SO->
nb_pts <<
" points\\\\" << endl;
2473 ost <<
"$$" << endl;
2475 ost <<
"$$" << endl;
2477 ost <<
"The points on the surface are:\\\\" << endl;
2478 ost <<
"\\begin{multicols}{2}" << endl;
2479 ost <<
"\\noindent" << endl;
2482 ost << i <<
" : $P_{" << i <<
"} = P_{" <<
SO->
Pts[i] <<
"}=";
2483 int_vec_print_fully(ost, v, 4);
2484 ost <<
"$\\\\" << endl;
2486 ost <<
"\\end{multicols}" << endl;
2489 ost <<
"Too many to print.\\\\" << endl;
2501 ost <<
"The surface has " <<
SO->
nb_pts <<
" points:\\\\" << endl;
2508 ost <<
"The points on the surface are:\\\\" << endl;
2509 ost <<
"\\begin{multicols}{3}" << endl;
2510 ost <<
"\\noindent" << endl;
2516 ost << i <<
" : $P_{" <<
SO->
Pts[i] <<
"}=";
2518 ost <<
"$\\\\" << endl;
2520 ost <<
"\\end{multicols}" << endl;
2522 ost <<
"\\\\" << endl;
2525 ost <<
"Too many to print.\\\\" << endl;
2536 ost <<
"\\noindent" << endl;
2539 ost <<
"Line " << i;
2548 <<
" points: $\\{ P_{i} \\mid i \\in ";
2551 ost <<
"\\}$\\\\" << endl;
2555 ost <<
"Too many to print.\\\\" << endl;
2569 <<
" points not on any line:\\\\" << endl;
2572 ost <<
"$$" << endl;
2578 ost <<
"$$" << endl;
2581 ost <<
"The points on the surface but not "
2582 "on lines are:\\\\" << endl;
2583 ost <<
"\\begin{multicols}{2}" << endl;
2584 ost <<
"\\noindent" << endl;
2589 ost <<
"$\\\\" << endl;
2591 ost <<
"\\end{multicols}" << endl;
2594 ost <<
"Too many to print.\\\\" << endl;
2603 ost <<
"\\bigskip" << endl;
2605 ost <<
"\\subsection*{Double sixes}" << endl;
2618 ost <<
"\\bigskip" << endl;
2620 ost <<
"\\subsection*{Half Double sixes}" << endl;
2633 ost <<
"The half double sixes are:\\\\" << endl;
2634 ost <<
"$$" << endl;
2637 ost <<
"$$" << endl;
2638 ost <<
"$$" << endl;
2641 36, 6, 36, 0,
TRUE );
2642 ost <<
"$$" << endl;
2658 ost <<
"\\subsection*{Trihedral pairs}" << endl;
2659 ost <<
"The planes in the trihedral pairs in Eckardt "
2660 "point labeling are:\\\\" << endl;
2661 ost <<
"$$" << endl;
2664 ost <<
"$$" << endl;
2665 ost <<
"$$" << endl;
2668 ost <<
"$$" << endl;
2669 ost <<
"$$" << endl;
2672 ost <<
"$$" << endl;
2679 std::ostream &ost,
int *T,
int nb_T)
2684 ost <<
"\\subsection*{Trihedral Pairs and the Clebsch System}" << endl;
2686 for (t = 0; t < nb_T; t++) {
2698 F_planes, G_planes, lambda,
equation,
2703 int_vec_swap(F_planes, F_planes + 8, 4);
2708 lambda, system, 0 );
2711 ost <<
"$" << t <<
" / " << nb_T <<
"$ ";
2712 ost <<
"$T_{" << t_idx <<
"} = T_{"
2714 <<
"} = \\\\" << endl;
2716 ost <<
"$\\\\" << endl;
2719 F_planes, G_planes, lambda);
2720 ost <<
"$\\\\" << endl;
2736 cout <<
"surface_object_properties::latex_table_of_trihedral_pairs" << endl;
2738 ost <<
"\\subsection*{Trihedral Pairs}" << endl;
2740 ost <<
"\\noindent" << endl;
2741 for (h = 0; h < nb_T; h++) {
2742 ost <<
"$" << h <<
" / " << nb_T <<
"$ ";
2744 ost <<
"$T_{" << t_idx <<
"} = T_{"
2746 <<
"} = \\\\" << endl;
2748 ost <<
"$\\\\" << endl;
2751 ost <<
"$\\\\" << endl;
2753 ost <<
"Dual point ranks: \\\\" << endl;
2755 ost <<
"$T_{" << i <<
"} = T_{"
2757 <<
"}: \\quad " << endl;
2758 for (j = 0; j < 6; j++) {
2764 ost <<
"$\\\\" << endl;
2769 ost <<
"Planes by generator matrix: \\\\" << endl;;
2770 for (i = 0; i < Surf->nb_trihedral_pairs; i++) {
2771 ost <<
"$T_{" << i <<
"} = T_{"
2772 << Surf->Trihedral_pair_labels[i] <<
"}$" << endl;
2773 for (j = 0; j < 6; j++) {
2777 ost <<
"Plane " << j <<
" has rank " << d <<
"\\\\" << endl;
2778 Surf->Gr3->unrank_int(d, 0 );
2781 print_integer_matrix_tex(ost, Surf->Gr3->M, 3, 4);
2783 ost <<
"$\\\\" << endl;
2788 cout <<
"surface_object_properties::latex_table_of_trihedral_pairs done" << endl;
2796 ost <<
"\\begin{array}{c||ccc|cc}" << endl;
2797 ost <<
" & G_0 & G_1 & G_2 & \\mbox{plane} & "
2798 "\\mbox{dual rank} \\\\" << endl;
2799 ost <<
"\\hline" << endl;
2800 ost <<
"\\hline" << endl;
2801 for (i = 0; i < 3; i++) {
2803 for (j = 0; j < 3; j++) {
2806 ost <<
"\\left[" << endl;
2808 ost <<
"\\right]}" << endl;
2811 ost <<
" & {\\pi_{" << e <<
"} =\\atop";
2813 t = Eckardt_to_Tritangent_plane[e];
2814 a = Tritangent_planes[t];
2818 ost <<
"\\left[" << endl;
2820 ost <<
"\\right]}" << endl;
2823 ost << a <<
"\\\\" << endl;
2825 ost <<
"\\hline" << endl;
2826 for (j = 0; j < 3; j++) {
2828 ost <<
" & {\\pi_{" << e <<
"} =\\atop";
2830 t = Eckardt_to_Tritangent_plane[e];
2831 a = Tritangent_planes[t];
2835 ost <<
"\\left[" << endl;
2837 ost <<
"\\right]}" << endl;
2839 ost <<
" & & \\\\" << endl;
2840 for (j = 0; j < 3; j++) {
2844 ost <<
" & & \\\\" << endl;
2846 ost <<
"\\end{array}" << endl;
2851 int *F_planes,
int *G_planes,
int &lambda,
int *
equation,
2854 int f_v = (verbose_level >= 1);
2856 int row_col_Eckardt_points[6];
2861 cout <<
"surface_object_properties::make_equation_in_trihedral_form t_idx=" << t_idx << endl;
2865 cout <<
"Trihedral pair T_{"
2870 for (h = 0; h < 6; h++) {
2874 for (i = 0; i < 6; i++) {
2879 for (i = 0; i < 3; i++) {
2885 for (i = 0; i < 3; i++) {
2887 plane_rk[3 + i], 0 );
2892 int pt_on_surface[4];
2893 int a, b, ma, bv, pt;
2901 for (i = 0; i < 3; i++) {
2904 for (i = 0; i < 3; i++) {
2906 G_planes + i * 4, pt_on_surface);
2908 a =
SO->
F->
mult3(evals[0], evals[1], evals[2]);
2909 b =
SO->
F->
mult3(evals[3], evals[4], evals[5]);
2918 cout <<
"surface_object_properties::make_equation_in_trihedral_form could "
2919 "not determine lambda" << endl;
2924 F_planes + 4, F_planes + 8,
2927 G_planes + 4, G_planes + 8,
2938 cout <<
"surface_object_properties::make_equation_in_trihedral_form done" << endl;
2943 int *F_planes,
int *G_planes,
int lambda)
2946 ost <<
"\\begin{align*}" << endl;
2947 ost <<
"0 & = F_0F_1F_2 + \\lambda G_0G_1G_2\\\\" << endl;
2948 ost <<
"& = " << endl;
2955 int *F_planes,
int *G_planes,
int lambda)
2967 ost <<
"+ " << lambda;
2980 std::ostream &ost,
int t_idx)
2991 F_planes, G_planes, lambda);
2996 int line_a,
int line_b,
int verbose_level)
2998 int f_v = (verbose_level >= 1);
3002 cout <<
"surface_object_properties::compute_transversal_line" << endl;
3005 cout <<
"surface_object_properties::compute_transversal_line SO->nb_lines != 27" << endl;
3008 for (i = 0; i < 27; i++) {
3021 cout <<
"surface_object_properties::compute_transversal_line "
3022 "did not find transversal line" << endl;
3026 cout <<
"surface_object_properties::compute_transversal_line "
3033 int line_a,
int line_b,
int *transversals5,
3036 int f_v = (verbose_level >= 1);
3041 cout <<
"surface_object_properties::compute_transversal_lines" << endl;
3044 cout <<
"surface_object_properties::compute_transversal_lines SO->nb_lines != 27" << endl;
3047 for (i = 0; i < 27; i++) {
3056 transversals5[nb_trans++] = i;
3059 if (nb_trans != 5) {
3060 cout <<
"surface_object_properties::compute_transversal_lines "
3061 "nb_trans != 5" << endl;
3065 cout <<
"surface_object_properties::compute_transversal_lines "
3074 long int *Clebsch_map,
int *Clebsch_coeff)
3081 ost <<
"\\begin{array}{|c|c|c|c|c|}" << endl;
3082 ost <<
"\\hline" << endl;
3083 ost <<
"i & P_i & \\mbox{lines} & \\Phi(P_i) & \\Phi(P_i)\\\\" << endl;
3084 ost <<
"\\hline" << endl;
3096 if (j < lines_on_point->Set_size[i] - 1) {
3103 if (Clebsch_map[i] >= 0) {
3107 ost <<
"\\mbox{undef}";
3110 if (Clebsch_map[i] >= 0) {
3115 ost <<
"\\mbox{undef}";
3117 ost <<
"\\\\" << endl;
3118 if (((i + 1) % 30) == 0) {
3119 ost <<
"\\hline" << endl;
3120 ost <<
"\\end{array}" << endl;
3121 ost <<
"$$" << endl;
3123 ost <<
"\\begin{array}{|c|c|c|c|c|}" << endl;
3124 ost <<
"\\hline" << endl;
3125 ost <<
"i & P_i & \\mbox{lines} & \\Phi(P_i) & "
3126 "\\Phi(P_i)\\\\" << endl;
3127 ost <<
"\\hline" << endl;
3130 ost <<
"\\hline" << endl;
3131 ost <<
"\\end{array}" << endl;
3132 ost <<
"$$" << endl;
3139 ost <<
"\\clearpage" << endl << endl;
3140 ost <<
"\\section*{Eckardt Points}" << endl;
3141 latex_table_of_Eckardt_points(ost);
3143 ost <<
"\\clearpage" << endl << endl;
3144 ost <<
"\\section*{Tritangent Planes}" << endl;
3145 latex_table_of_tritangent_planes(ost);
3148 ost <<
"\\clearpage" << endl << endl;
3149 ost <<
"\\section*{Steiner Trihedral Pairs}" << endl;
3158 cout <<
"surface_object_properties::latex_table_of_trihedral_pairs" << endl;
3161 ost <<
"$T_{" << i <<
"} = T_{"
3163 <<
"} = $\\\\" << endl;
3172 ost <<
"$\\\\" << endl;
3175 int_vec_print(ost, Trihedral_to_Eckardt + i * 6, 6);
3176 ost <<
"$\\\\" << endl;
3183 cout <<
"surface_object_properties::latex_table_of_trihedral_pairs done" << endl;
3191 ost <<
"\\begin{array}{*{" << 3 <<
"}{c}|c}" << endl;
3192 for (i = 0; i < 3; i++) {
3193 for (j = 0; j < 3; j++) {
3199 ost <<
"}=" << endl;
3201 t = Eckardt_to_Tritangent_plane[TE[i]];
3202 plane_rk = Tritangent_planes[t];
3211 ost <<
"\\big)=" << plane_rk;
3212 ost <<
"\\\\" << endl;
3214 ost <<
"\\hline" << endl;
3215 for (j = 0; j < 3; j++) {
3220 ost <<
"\\\\" << endl;
3221 for (j = 0; j < 3; j++) {
3222 ost <<
"\\multicolumn{4}{l}{" << endl;
3224 t = Eckardt_to_Tritangent_plane[TE[3 + j]];
3225 plane_rk = Tritangent_planes[t];
3231 ost <<
"}=" << endl;
3232 ost <<
"V\\big(" << endl;
3237 ost <<
"\\big)=" << plane_rk <<
"}\\\\" << endl;
3239 ost <<
"\\\\" << endl;
3240 ost <<
"\\end{array}" << endl;
3246 int f_v = (verbose_level >= 1);
3253 cout <<
"surface_object_properties::compute_reduced_set_of_points_not_on_lines_wrt_P" << endl;
3271 for (j = 0; j <
SO->
F->
q + 1; j++) {
3274 cout <<
"surface_object_properties::compute_reduced_set_of_points_not_on_lines_wrt_P v=" << endl;
3282 cout <<
"surface_object_properties::compute_reduced_set_of_points_not_on_lines_wrt_P w=" << endl;
3290 f_deleted[i] =
TRUE;
3299 cout <<
"surface_object_properties::compute_reduced_set_of_points_not_on_lines_wrt_P done" << endl;
3306 int f_v = (verbose_level >= 1);
3308 long int P, R, rk_tangent_plane;
3312 cout <<
"surface_object_properties::test_full_del_pezzo" << endl;
3319 rk_tangent_plane, 0 );
3333 cout <<
"projective_space::dual_rank_of_plane_in_three_space" << endl;
3344 cout <<
"surface_object_properties::test_full_del_pezzo done" << endl;
3351 std::string &surface_label, std::string &col_postfix,
int verbose_level)
3353 string col_lab_surface_label;
3354 string col_lab_nb_lines;
3355 string col_lab_nb_points;
3356 string col_lab_nb_singular_points;
3357 string col_lab_nb_Eckardt_points;
3358 string col_lab_nb_double_points;
3359 string col_lab_nb_Single_points;
3360 string col_lab_nb_pts_not_on_lines;
3361 string col_lab_nb_Hesse_planes;
3362 string col_lab_nb_axes;
3365 col_lab_surface_label.assign(
"Surface");
3368 col_lab_nb_lines.assign(
"#L");
3369 col_lab_nb_lines.append(col_postfix);
3371 col_lab_nb_points.assign(
"#P");
3372 col_lab_nb_points.append(col_postfix);
3374 col_lab_nb_singular_points.assign(
"#S");
3375 col_lab_nb_singular_points.append(col_postfix);
3377 col_lab_nb_Eckardt_points.assign(
"#E");
3378 col_lab_nb_Eckardt_points.append(col_postfix);
3380 col_lab_nb_double_points.assign(
"#D");
3381 col_lab_nb_double_points.append(col_postfix);
3383 col_lab_nb_Single_points.assign(
"#U");
3384 col_lab_nb_Single_points.append(col_postfix);
3386 col_lab_nb_pts_not_on_lines.assign(
"#OFF");
3387 col_lab_nb_pts_not_on_lines.append(col_postfix);
3389 col_lab_nb_Hesse_planes.assign(
"#H");
3390 col_lab_nb_Hesse_planes.append(col_postfix);
3392 col_lab_nb_axes.assign(
"#AX");
3393 col_lab_nb_axes.append(col_postfix);
3421 f << col_lab_surface_label <<
",";
3422 f << col_lab_nb_lines <<
",";
3423 f << col_lab_nb_points <<
",";
3424 f << col_lab_nb_singular_points <<
",";
3425 f << col_lab_nb_Eckardt_points <<
",";
3426 f << col_lab_nb_double_points <<
",";
3427 f << col_lab_nb_Single_points <<
",";
3428 f << col_lab_nb_pts_not_on_lines <<
",";
3429 f << col_lab_nb_Hesse_planes <<
",";
3430 f << col_lab_nb_axes <<
",";
3433 f << surface_label <<
",";
3447 cout <<
"Written file " << fname <<
" of size " << Fio.
file_size(fname) << endl;
void three_lines(surface_domain *S, int *three_lines)
void latex_index_only(std::ostream &ost)
std::string * Line_label_tex
void print_trihedral_pairs(std::ostream &ost)
void latex_table_of_double_sixes(std::ostream &ost)
long int * Half_double_sixes
std::string * Eckard_point_label_tex
void latex_triads(std::ostream &ost)
long int * Lines_in_tritangent_planes
long int * Trihedral_to_Eckardt
eckardt_point * Eckardt_points
std::string * Trihedral_pair_labels
void latex_table_of_half_double_sixes(std::ostream &ost)
schlaefli_labels * Labels
int identify_Eckardt_point(int line1, int line2, int line3, int verbose_level)
void print_line(std::ostream &ost, int rk)
geometry::projective_space * P2
void prepare_system_from_FG(int *F_planes, int *G_planes, int lambda, int *&system, int verbose_level)
void compute_points_on_lines(long int *Pts_on_surface, int nb_points_on_surface, long int *Lines, int nb_lines, data_structures::set_of_sets *&pts_on_lines, int *&f_is_on_line, int verbose_level)
geometry::projective_space * P
geometry::grassmann * Gr3
void print_system(std::ostream &ost, int *system)
void compute_intersection_points_and_indices(int *Adj, long int *Points, int nb_points, long int *Lines, int nb_lines, int *&Intersection_pt, int *&Intersection_pt_idx, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly1_4
long int rank_point(int *v)
void multiply_linear_times_linear_times_linear_in_space(int *four_coeff1, int *four_coeff2, int *four_coeff3, int *twenty_coeff, int verbose_level)
void Trihedral_pairs_to_planes(long int *Lines, long int *Planes_by_rank, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly3_4
void compute_gradient(int *equation20, int *&gradient, int verbose_level)
field_theory::finite_field * F
void print_equation_tex(std::ostream &ost, int *coeffs)
void print_equation_with_line_breaks_tex(std::ostream &ost, int *coeffs)
ring_theory::homogeneous_polynomial_domain * Poly2_4
void compute_adjacency_matrix_of_line_intersection_graph(int *&Adj, long int *S, int n, int verbose_level)
Given a set of lines in S[n], compute the associated line intersection graph.
void print_lines_tex(std::ostream &ost, long int *Lines, int nb_lines)
void unrank_point(int *v, long int rk)
void compute_reduced_set_of_points_not_on_lines_wrt_P(int P_idx, int *&f_deleted, int verbose_level)
void print_half_double_sixes_numerically(std::ostream &ost)
int * Eckardt_point_bitvector_in_Schlaefli_labeling
void print_double_sixes(std::ostream &ost)
void print_single_points(std::ostream &ost)
long int * Tritangent_plane_rk
long int * Pts_not_on_lines
void print_tritangent_planes(std::ostream &ost)
void print_plane_type_by_points(std::ostream &ost)
void make_and_print_equation_in_trihedral_form(std::ostream &ost, int t_idx)
void compute_tritangent_planes_by_rank(int verbose_level)
int * Line_intersection_pt
void report_properties_simple(std::ostream &ost, int verbose_level)
data_structures::set_of_sets * pts_on_lines
void compute_plane_type_by_points(int verbose_level)
void compute_Lines_in_tritangent_planes(int verbose_level)
void compute_gradient(int verbose_level)
void compute_axes(int verbose_level)
long int * Trihedral_pairs_as_tritangent_planes
data_structures::set_of_sets * lines_on_point
void clebsch_map_latex(std::ostream &ost, long int *Clebsch_map, int *Clebsch_coeff)
void report_properties(std::ostream &ost, int verbose_level)
void print_planes_in_trihedral_pairs(std::ostream &ost)
void latex_trihedral_pair(std::ostream &ost, int t_idx)
void print_points_on_lines(std::ostream &ost)
void print_half_double_sixes(std::ostream &ost)
void compute_transversal_lines(int line_a, int line_b, int *transversals5, int verbose_level)
int * Eckardt_point_Hesse_plane_incidence
void print_points_on_surface_but_not_on_a_line(std::ostream &ost)
void create_summary_file(std::string &fname, std::string &surface_label, std::string &col_postfix, int verbose_level)
void make_equation_in_trihedral_form(int t_idx, int *F_planes, int *G_planes, int &lambda, int *equation, int verbose_level)
void print_Hesse_planes(std::ostream &ost)
void print_points(std::ostream &ost)
void print_affine_points_in_source_code(std::ostream &ost)
void print_line_intersection_graph(std::ostream &ost)
int * Line_intersection_pt_idx
int * Eckardt_points_plane_type
void init(surface_object *SO, int verbose_level)
~surface_object_properties()
void print_equation_in_trihedral_form(std::ostream &ost, int *F_planes, int *G_planes, int lambda)
long int * tangent_plane_rank_dual
long int * Axes_Eckardt_points
void print_double_points(std::ostream &ost)
void print_Eckardt_points(std::ostream &ost)
void print_points_on_surface(std::ostream &ost)
void print_adjacency_list(std::ostream &ost)
void print_singular_points(std::ostream &ost)
int * Eckardt_points_line_type
void compute_singular_points_and_tangent_planes(int verbose_level)
void print_lines(std::ostream &ost)
void print_trihedral_pairs_numerically(std::ostream &ost)
int * Eckardt_points_schlaefli_labels
void print_equation_in_trihedral_form_equation_only(std::ostream &ost, int *F_planes, int *G_planes, int lambda)
void print_all_points_on_surface(std::ostream &ost)
long int * tangent_plane_rank_global
void print_trihedral_pairs(std::ostream &ost)
int test_full_del_pezzo(int P_idx, int *f_deleted, int verbose_level)
void print_single_tritangent_plane(std::ostream &ost, int plane_idx)
void print_adjacency_matrix_with_intersection_points(std::ostream &ost)
void print_lines_with_points_on_them(std::ostream &ost)
void print_general(std::ostream &ost)
void compute_planes_and_dual_point_ranks(int verbose_level)
void print_equation(std::ostream &ost)
void print_axes(std::ostream &ost)
surface_object_properties()
void compute_adjacency_matrix_of_line_intersection_graph(int verbose_level)
void print_neighbor_sets(std::ostream &ost)
void print_everything(std::ostream &ost, int verbose_level)
int * Eckardt_points_index
data_structures::set_of_sets * Line_neighbors
void latex_table_of_trihedral_pairs_and_clebsch_system(std::ostream &ost, int *T, int nb_T)
void compute_Trihedral_pairs_as_tritangent_planes(int verbose_level)
long int * Eckardt_points
data_structures::tally * Type_lines_on_point
long int * Lines_in_tritangent_planes
int * Adj_line_intersection_graph
void compute_properties(int verbose_level)
int * plane_type_by_points
int * plane_type_by_lines
int * Single_points_index
void print_adjacency_matrix(std::ostream &ost)
int compute_transversal_line(int line_a, int line_b, int verbose_level)
long int * Axes_line_rank
data_structures::tally * C_plane_type_by_points
data_structures::tally * Type_pts_on_lines
void print_Steiner_and_Eckardt(std::ostream &ost)
void latex_table_of_trihedral_pairs(std::ostream &ost, int *T, int nb_T)
int * Double_points_index
a particular cubic surface in PG(3,q), given by its equation
field_theory::finite_field * F
int find_point(long int P, int &idx)
void apply_lint(int *from, long int *through, long int *to, int len)
void print_table_tex(std::ostream &ost)
void init_from_adjacency_matrix(int n, int *Adj, int verbose_level)
void dualize(set_of_sets *&S, int verbose_level)
a collection of functions related to sorted vectors
int lint_vec_search_linear(long int *v, int len, long int a, int &idx)
void int_vec_heapsort(int *v, int len)
void lint_vec_sort_and_remove_duplicates(long int *v, int &len)
int lint_vec_search(long int *v, int len, long int a, int &idx, int verbose_level)
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 init_lint(long int *data, int data_length, int f_second, int verbose_level)
void print_naked_tex(std::ostream &ost, int f_backwards)
void print_naked(int f_backwards)
void get_class_by_value(int *&Pts, int &nb_pts, int value, int verbose_level)
void PG_element_normalize(int *v, int stride, int len)
void PG_element_unrank_modified(int *v, int stride, int len, int a)
int mult3(int a1, int a2, int a3)
linear_algebra::linear_algebra * Linear_algebra
void print_element(std::ostream &ost, int a)
void PG_element_rank_modified_lint(int *v, int stride, int len, long int &a)
void unrank_lint(long int rk, int verbose_level)
void unrank_lint_here_and_compute_perp(int *Mtx, long int rk, int verbose_level)
void print_set_tex(std::ostream &ost, long int *v, int len)
long int rank_lint_here(int *Mtx, int verbose_level)
void print_single_generator_matrix_tex_numerical(std::ostream &ost, long int a)
void unrank_lint_here(int *Mtx, long int rk, int verbose_level)
void print_single_generator_matrix_tex(std::ostream &ost, long int a)
void plane_intersection_type_basic(long int *set, int set_size, int *type, int verbose_level)
void planes_through_a_line(long int line_rk, std::vector< long int > &plane_ranks, int verbose_level)
void point_plane_incidence_matrix(long int *point_rks, int nb_points, long int *plane_rks, int nb_planes, int *&M, int verbose_level)
long int plane_rank_using_dual_coordinates_in_three_space(int *eqn4, int verbose_level)
void line_intersection_type_collected(long int *set, int set_size, int *type_collected, int verbose_level)
void unrank_plane(int *basis, long int rk)
long int dual_rank_of_plane_in_three_space(long int plane_rank, int verbose_level)
void unrank_point(int *v, long int rk)
void scalar_multiply_vector_in_place(int c, int *A, int m)
void mult_matrix_matrix(int *A, int *B, int *C, int m, int n, int o, int verbose_level)
int Gauss_easy(int *A, int m, int n)
int Gauss_simple(int *A, int m, int n, int *base_cols, int verbose_level)
void add_vector(int *A, int *B, int *C, int m)
a collection of functions related to file io
long int file_size(std::string &fname)
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_lint_matrix_with_standard_labels_and_offset(std::ostream &ost, long int *p, int m, int n, int m_offset, int n_offset, int f_tex)
void lint_vec_print_as_matrix(std::ostream &ost, long int *v, int len, int width, int f_tex)
void print_integer_matrix_tex(std::ostream &ost, int *p, int m, int n)
void lint_set_print_tex(std::ostream &ost, long int *v, int len)
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)
void int_vec_print_as_matrix(std::ostream &ost, int *v, int len, int width, int f_tex)
data_structures::int_vec * Int_vec
void print_equation_numerical(std::ostream &ost, int *coeffs)
int evaluate_at_a_point(int *coeff, int *pt_vec)
void print_equation(std::ostream &ost, int *coeffs)
void vanishing_ideal(long int *Pts, int nb_pts, int &r, int *Kernel, int verbose_level)
#define Lint_vec_copy(A, B, C)
#define Int_vec_zero(A, B)
#define Int_vec_print_fully(A, B, C)
#define Lint_vec_print(A, B, C)
#define Int_vec_copy(A, B, C)
#define Int_vec_print(A, B, C)
#define Lint_vec_print_fully(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
std::vector< term > equation
the orbiter library for the classification of combinatorial objects
#define MAX_NUMBER_OF_PLANES_FOR_PLANE_TYPE