21namespace layer1_foundations {
22namespace algebraic_geometry {
115 int f_v = (verbose_level >= 1);
118 cout <<
"quartic_curve_object_properties::init" << endl;
127 cout <<
"quartic_curve_object_properties::init before points_on_curve_on_lines" << endl;
131 cout <<
"quartic_curve_object_properties::init after points_on_curve_on_lines" << endl;
137 cout <<
"quartic_curve_object_properties::init before compute_singular_points_and_tangent_lines" << endl;
141 cout <<
"quartic_curve_object_properties::init after compute_singular_points_and_tangent_lines" << endl;
145 cout <<
"quartic_curve_object_properties::init done" << endl;
151 std::string &surface_label, std::string &col_postfix,
int verbose_level)
154 string col_lab_surface_label;
155 string col_lab_nb_lines;
156 string col_lab_nb_points;
157 string col_lab_nb_singular_points;
158 string col_lab_nb_Eckardt_points;
159 string col_lab_nb_double_points;
160 string col_lab_nb_Single_points;
161 string col_lab_nb_pts_not_on_lines;
162 string col_lab_nb_Hesse_planes;
163 string col_lab_nb_axes;
166 col_lab_surface_label.assign(
"Surface");
169 col_lab_nb_lines.assign(
"#L");
170 col_lab_nb_lines.append(col_postfix);
172 col_lab_nb_points.assign(
"#P");
173 col_lab_nb_points.append(col_postfix);
175 col_lab_nb_singular_points.assign(
"#S");
176 col_lab_nb_singular_points.append(col_postfix);
178 col_lab_nb_Eckardt_points.assign(
"#E");
179 col_lab_nb_Eckardt_points.append(col_postfix);
181 col_lab_nb_double_points.assign(
"#D");
182 col_lab_nb_double_points.append(col_postfix);
184 col_lab_nb_Single_points.assign(
"#U");
185 col_lab_nb_Single_points.append(col_postfix);
187 col_lab_nb_pts_not_on_lines.assign(
"#OFF");
188 col_lab_nb_pts_not_on_lines.append(col_postfix);
190 col_lab_nb_Hesse_planes.assign(
"#H");
191 col_lab_nb_Hesse_planes.append(col_postfix);
193 col_lab_nb_axes.assign(
"#AX");
194 col_lab_nb_axes.append(col_postfix);
222 f << col_lab_surface_label <<
",";
223 f << col_lab_nb_lines <<
",";
224 f << col_lab_nb_points <<
",";
225 f << col_lab_nb_singular_points <<
",";
226 f << col_lab_nb_Eckardt_points <<
",";
227 f << col_lab_nb_double_points <<
",";
228 f << col_lab_nb_Single_points <<
",";
229 f << col_lab_nb_pts_not_on_lines <<
",";
230 f << col_lab_nb_Hesse_planes <<
",";
231 f << col_lab_nb_axes <<
",";
234 f << surface_label <<
",";
235 f << SO->nb_lines <<
",";
236 f << SO->nb_pts <<
",";
238 f << nb_Eckardt_points <<
",";
239 f << nb_Double_points <<
",";
240 f << nb_Single_points <<
",";
241 f << nb_pts_not_on_lines <<
",";
242 f << nb_Hesse_planes <<
",";
248 cout <<
"Written file " << fname <<
" of size " << Fio.file_size(fname) << endl;
255 int f_v = (verbose_level >= 1);
258 cout <<
"quartic_curve_object_properties::report_properties_simple" << endl;
263 cout <<
"quartic_curve_object_properties::report_properties_simple before print_equation" << endl;
268 cout <<
"quartic_curve_object_properties::report_properties_simple before print_gradient" << endl;
273 cout <<
"quartic_curve_object_properties::report_properties_simple before print_general" << endl;
278 cout <<
"quartic_curve_object_properties::report_properties_simple before print_points" << endl;
286 cout <<
"quartic_curve_object_properties::report_properties_simple before print_lines_with_points_on_them" << endl;
292 cout <<
"quartic_curve_object_properties::report_properties_simple before print_bitangents" << endl;
298 cout <<
"quartic_curve_object_properties::report_properties_simple before report_bitangent_line_type" << endl;
303 cout <<
"quartic_curve_object_properties::report_properties_simple done" << endl;
309 ost <<
"\\subsection*{The equation}" << endl;
310 ost <<
"The equation of the quartic curve ";
311 ost <<
" is :" << endl;
314 ost <<
"\\begin{array}{c}" << endl;
316 ost <<
"\\end{array}" << endl;
327 ost <<
"The point rank of the equation over GF$(" <<
QO->
F->
q <<
")$ is " << rk <<
"\\\\" << endl;
339 ost <<
"\\subsection*{The gradient}" << endl;
340 ost <<
"The gradient of the quartic curve ";
341 ost <<
" is :" << endl;
343 for (i = 0; i < 3; i++) {
345 ost <<
"\\begin{array}{c}" << endl;
347 ost <<
"\\end{array}" << endl;
359 ost <<
"The point rank of the equation over GF$(" <<
QO->
F->
q <<
")$ is " << rk <<
"\\\\" << endl;
371 ost <<
"\\subsection*{General information}" << endl;
384 ost <<
"{\\renewcommand{\\arraystretch}{1.5}" << endl;
386 ost <<
"\\begin{array}{|l|r|}" << endl;
387 ost <<
"\\hline" << endl;
388 ost <<
"\\mbox{Number of bitangents} & " << nb_bitangents <<
"\\\\" << endl;
389 ost <<
"\\hline" << endl;
390 ost <<
"\\mbox{Number of points} & " <<
QO->
nb_pts <<
"\\\\" << endl;
391 ost <<
"\\hline" << endl;
395 ost <<
"\\mbox{Fullness} & \\mbox{is full}\\\\" << endl;
396 ost <<
"\\hline" << endl;
399 ost <<
"\\mbox{Fullness} & \\mbox{not full}\\\\" << endl;
400 ost <<
"\\hline" << endl;
403 ost <<
"\\mbox{Number of Kovalevski points} & " <<
nb_Kovalevski <<
"\\\\" << endl;
404 ost <<
"\\hline" << endl;
407 ost <<
"\\mbox{Bitangent line type $(a_0,a_1,a_2)$} & ";
415 ost <<
"\\\\" << endl;
416 ost <<
"\\hline" << endl;
417 ost <<
"\\mbox{Number of singular points} & " <<
nb_singular_pts <<
"\\\\" << endl;
418 ost <<
"\\hline" << endl;
422 ost <<
"\\mbox{Number of Eckardt points} & " << nb_Eckardt_points <<
"\\\\" << endl;
423 ost <<
"\\hline" << endl;
424 ost <<
"\\mbox{Number of double points} & " << nb_Double_points <<
"\\\\" << endl;
425 ost <<
"\\hline" << endl;
426 ost <<
"\\mbox{Number of single points} & " << nb_Single_points <<
"\\\\" << endl;
427 ost <<
"\\hline" << endl;
428 ost <<
"\\mbox{Number of points off lines} & " << nb_pts_not_on_lines <<
"\\\\" << endl;
429 ost <<
"\\hline" << endl;
430 ost <<
"\\mbox{Number of Hesse planes} & " << nb_Hesse_planes <<
"\\\\" << endl;
431 ost <<
"\\hline" << endl;
432 ost <<
"\\mbox{Number of axes} & " << nb_axes <<
"\\\\" << endl;
433 ost <<
"\\hline" << endl;
434 ost <<
"\\mbox{Type of points on lines} & ";
435 Type_pts_on_lines->print_naked_tex(ost,
TRUE);
436 ost <<
"\\\\" << endl;
437 ost <<
"\\hline" << endl;
438 ost <<
"\\mbox{Type of lines on points} & ";
439 Type_lines_on_point->print_naked_tex(ost,
TRUE);
440 ost <<
"\\\\" << endl;
441 ost <<
"\\hline" << endl;
445 ost <<
"\\end{array}" << endl;
446 ost <<
"$$}" << endl;
448 ost <<
"Points on lines:" << endl;
450 Type_pts_on_lines->print_naked_tex(ost,
TRUE);
452 ost <<
"Lines on points:" << endl;
454 Type_lines_on_point->print_naked_tex(ost,
TRUE);
462 ost <<
"\\subsection*{All points on the curve}" << endl;
464 cout <<
"quartic_curve_object_properties::print_points before print_all_points" << endl;
468 ost <<
"\\subsubsection*{Eckardt Points}" << endl;
469 cout <<
"quartic_curve_object_properties::print_points before print_Eckardt_points" << endl;
470 print_Eckardt_points(ost);
472 ost <<
"\\subsubsection*{Singular Points}" << endl;
473 cout <<
"quartic_curve_object_properties::print_points before print_singular_points" << endl;
474 print_singular_points(ost);
476 ost <<
"\\subsubsection*{Double Points}" << endl;
477 cout <<
"quartic_curve_object_properties::print_points before print_double_points" << endl;
478 print_double_points(ost);
480 ost <<
"\\subsubsection*{Points on lines}" << endl;
481 cout <<
"quartic_curve_object_properties::print_points before print_points_on_lines" << endl;
482 print_points_on_lines(ost);
484 ost <<
"\\subsubsection*{Points on surface but on no line}" << endl;
485 cout <<
"quartic_curve_object_properties::print_points before print_points_on_surface_but_not_on_a_line" << endl;
486 print_points_on_surface_but_not_on_a_line(ost);
499 ost <<
"The surface has " <<
QO->
nb_pts <<
" points:\\\\" << endl;
506 ost <<
"The points on the quartic curve are:\\\\" << endl;
507 ost <<
"\\begin{multicols}{3}" << endl;
508 ost <<
"\\noindent" << endl;
516 ost << i <<
" : $P_{" <<
QO->
Pts[i] <<
"}=";
518 ost <<
"$\\\\" << endl;
520 ost <<
"\\end{multicols}" << endl;
521 ost <<
"The points by rank are: " << endl;
523 ost <<
"\\\\" << endl;
530 cout <<
"quartic_curve_object_properties::print_all_points before Labels->init" << endl;
534 cout <<
"quartic_curve_object_properties::print_all_points after Labels->init" << endl;
539 ost <<
"The Kovalevski points are: \\\\" << endl;
548 for (j = 0; j < 4; j++) {
556 ost <<
"$\\\\" << endl;
561 ost <<
"The Kovalevski points by rank are: " << endl;
563 ost <<
"\\\\" << endl;
565 ost <<
"The points off the curve are: \\\\" << endl;
566 ost <<
"\\begin{multicols}{3}" << endl;
567 ost <<
"\\noindent" << endl;
570 ost << i <<
" : $P_{" <<
Pts_off[i] <<
"}=";
572 ost <<
"$\\\\" << endl;
574 ost <<
"\\end{multicols}" << endl;
576 ost <<
"\\\\" << endl;
580 ost <<
"Too many to print.\\\\" << endl;
587 ost <<
"\\subsection*{The 28 Bitangents}" << endl;
589 ost <<
"Curve Points on Bitangents:\\\\" << endl;
598 int verbose_level = 1;
605 ost <<
"The lines and their points of contact are:\\\\" << endl;
608 for (i = 0; i < nb_lines; i++) {
617 if (nb_lines == 27) {
618 ost <<
" = " << Schlaefli->Line_label_tex[i];
621 ost <<
" = " << endl;
629 ost <<
"_{" << Lines[i] <<
"}" << endl;
633 ost <<
"\\left[" << endl;
635 ost <<
"\\right]_{" << Lines[i] <<
"}" << endl;
638 for (j = 0; j < SoS->
Set_size[i]; j++) {
641 ost <<
"P_{" <<
QO->
Pts[a] <<
"}";
648 3 , 2 , 1 , verbose_level);
655 for (h = 0; h <= 4; h++) {
661 ost <<
"\\;" << h <<
" \\times ";
663 if (j < SoS->Set_size[i] - 1) {
668 ost <<
"$\\\\" << endl;
671 ost <<
"Rank of lines: ";
673 ost <<
"\\\\" << endl;
680void quartic_curve_object_properties::print_bitangents_with_points_on_them(std::ostream &ost)
685 ost <<
"\\subsection*{The 28 bitangents with points on them}" << endl;
689 for (i = 0; i < 28; i++) {
693 ost <<
"\\ell_{" << i <<
"} ";
695 if (SO->nb_lines == 27) {
696 ost <<
" = " << SO->Surf->Schlaefli->Line_label_tex[i];
699 ost <<
" = \\left[" << endl;
707 ost <<
"which contains the point set " << endl;
709 ost <<
"\\{ P_{i} \\mid i \\in ";
712 ost <<
"\\}." << endl;
716 std::vector<long int> plane_ranks;
718 SO->Surf->P->planes_through_a_line(
719 SO->Lines[i], plane_ranks,
723 ost <<
"The tangent planes associated with the points on this line are:\\\\" << endl;
729 ost << j <<
" : " << pt <<
" : ";
730 SO->Surf->unrank_point(w, SO->Pts[pt]);
733 if (tangent_plane_rank_global[pt] == -1) {
734 ost <<
" is singular\\\\" << endl;
737 ost << tangent_plane_rank_global[pt] <<
"\\\\" << endl;
740 ost <<
"The planes in the pencil through the line are:\\\\" << endl;
741 for (j = 0; j < plane_ranks.size(); j++) {
742 ost << j <<
" : " << plane_ranks[j] <<
"\\\\" << endl;
754 int f_v = (verbose_level >= 1);
757 cout <<
"quartic_curve_object_properties::points_on_curve_on_lines" << endl;
761 cout <<
"quartic_curve_object_properties::points_on_curve_on_lines !QO->f_has_bitangents" << endl;
773 cout <<
"quartic_curve_object_properties::points_on_curve_on_lines before "
774 "Surf->compute_points_on_lines" << endl;
782 cout <<
"quartic_curve_object_properties::points_on_curve_on_lines after "
783 "Surf->compute_points_on_lines" << endl;
789 cout <<
"quartic_curve_object_properties::points_on_curve_on_lines pts_on_lines:" << endl;
798 cout <<
"Line type:" << endl;
805 for (i = 0; i <= 2; i++) {
818 cout <<
"quartic_curve_object_properties::points_on_curve_on_lines lines_on_point:" << endl;
826 cout <<
"quartic_curve_object_properties::points_on_curve_on_lines type of lines_on_point:" << endl;
846 for (j = 0; j < l; j++) {
857 cout <<
"quartic_curve_object_properties::points_on_curve_on_lines before "
858 "Surf->compute_points_on_lines for complement" << endl;
866 cout <<
"quartic_curve_object_properties::points_on_curve_on_lines after "
867 "Surf->compute_points_on_lines" << endl;
873 cout <<
"quartic_curve_object_properties::points_on_curve_on_lines pts_off_on_lines:" << endl;
879 cout <<
"quartic_curve_object_properties::points_on_curve_on_lines lines_on_point:" << endl;
887 cout <<
"quartic_curve_object_properties::points_on_curve_on_lines type of lines_on_point off:" << endl;
900 for (j = 0; j < l; j++) {
908 cout <<
"K.size() != nb_Kovalevski" << endl;
909 cout <<
"K.size()=" << K.size() << endl;
922 cout <<
"quartic_curve_object_properties::points_on_curve_on_lines done" << endl;
935 ost <<
"Line type: $" << endl;
937 ost <<
"$\\\\" << endl;
944 ost <<
"point types: $" << endl;
946 ost <<
"$\\\\" << endl;
952 ost <<
"point types for points off the curve: $" << endl;
954 ost <<
"$\\\\" << endl;
960 ost <<
"Lines on points off the curve:\\\\" << endl;
968 ost <<
"Off point " << i <<
" = $P_{" << a <<
"} = ";
974 ost <<
"\\\\" << endl;
983 int f_v = (verbose_level >= 1);
986 cout <<
"quartic_curve_object_properties::compute_gradient" << endl;
991 cout <<
"quartic_curve_object_properties::compute_gradient before QO->Dom->compute_gradient" << endl;
997 cout <<
"quartic_curve_object_properties::compute_gradient done" << endl;
1007 int f_v = (verbose_level >= 1);
1011 cout <<
"quartic_curve_object_properties::compute_singular_points_and_tangent_lines" << endl;
1021 cout <<
"quartic_curve_object_properties::compute_singular_points_and_tangent_lines before compute_gradient" << endl;
1025 cout <<
"quartic_curve_object_properties::compute_singular_points_and_tangent_lines after compute_gradient" << endl;
1036 cout <<
"quartic_curve_object_properties::compute_singular_points_and_tangent_lines "
1037 "h=" << h <<
" / " <<
QO->
nb_pts << endl;
1041 cout <<
"quartic_curve_object_properties::compute_singular_points_and_tangent_lines "
1042 "rk=" << rk << endl;
1046 cout <<
"quartic_curve_object_properties::compute_singular_points_and_tangent_lines "
1051 for (i = 0; i < nb_eqns; i++) {
1053 cout <<
"quartic_curve_object_properties::compute_singular_points_and_tangent_lines "
1054 "gradient i=" << i <<
" / " << nb_eqns << endl;
1057 cout <<
"quartic_curve_object_properties::compute_singular_points_and_tangent_lines "
1058 "gradient " << i <<
" = ";
1067 cout <<
"quartic_curve_object_properties::compute_singular_points_and_tangent_lines "
1068 "value = " << w[i] << endl;
1071 for (i = 0; i < nb_eqns; i++) {
1095 int nb_tangent_lines;
1102 cout <<
"quartic_curve_object_properties::compute_singular_points_and_tangent_lines nb_tangent_lines " << nb_tangent_lines << endl;
1106 string fname_tangents;
1109 fname_tangents.assign(
"tangents.txt");
1111 Fio.write_set_to_file_lint(fname_tangents,
1112 tangent_plane_rank_dual, nb_tangent_planes, verbose_level);
1115 cout <<
"Written file " << fname_tangents <<
" of size " << Fio.file_size(fname_tangents) << endl;
1136 cout <<
"The system has rank " << r << endl;
1137 cout <<
"The ideal has dimension " << ns << endl;
1139 cout <<
"and is generated by:" << endl;
1141 cout <<
"corresponding to the following basis "
1142 "of polynomials:" << endl;
1143 for (h = 0; h < ns; h++) {
1156 cout <<
"quartic_curve_object_properties::compute_singular_points_and_tangent_lines done" << endl;
void unrank_point(int *v, long int rk)
void compute_points_on_lines(long int *Pts, int nb_points, long int *Lines, int nb_lines, data_structures::set_of_sets *&pts_on_lines, int *&f_is_on_line, int verbose_level)
void print_lines_tex(std::ostream &ost, long int *Lines, int nb_lines)
ring_theory::homogeneous_polynomial_domain * Poly3_3
geometry::projective_space * P
void print_gradient_with_line_breaks_tex(std::ostream &ost, int *coeffs)
field_theory::finite_field * F
void print_equation_with_line_breaks_tex(std::ostream &ost, int *coeffs)
void compute_gradient(int *equation15, int *&gradient, int verbose_level)
ring_theory::homogeneous_polynomial_domain * Poly4_3
algebraic_geometry::schlaefli_labels * Schlaefli
ring_theory::homogeneous_polynomial_domain * Poly2_3
quartic_curve_object_properties()
void report_bitangent_line_type(std::ostream &ost)
long int * Kovalevski_points
data_structures::tally * Point_type
void init(quartic_curve_object *QO, int verbose_level)
void compute_singular_points_and_tangent_lines(int verbose_level)
data_structures::set_of_sets * pts_on_lines
void print_lines_with_points_on_them(std::ostream &ost, long int *Lines, int nb_lines, data_structures::set_of_sets *SoS)
void print_points(std::ostream &ost)
void print_bitangents(std::ostream &ost)
data_structures::set_of_sets * lines_on_points_off
void compute_gradient(int verbose_level)
void create_summary_file(std::string &fname, std::string &surface_label, std::string &col_postfix, int verbose_level)
void print_general(std::ostream &ost)
~quartic_curve_object_properties()
int f_fullness_has_been_established
data_structures::tally * Point_off_type
data_structures::set_of_sets * lines_on_point
long int * tangent_line_rank_dual
void print_all_points(std::ostream &ost)
int * Kovalevski_point_idx
void print_gradient(std::ostream &ost)
void points_on_curve_on_lines(int verbose_level)
data_structures::tally * Bitangent_line_type
long int * tangent_line_rank_global
void print_equation(std::ostream &ost)
void report_properties_simple(std::ostream &ost, int verbose_level)
quartic_curve_object * QO
data_structures::set_of_sets * pts_off_on_lines
int line_type_distribution[3]
a particular quartic curve in PG(2,q), given by its equation
quartic_curve_domain * Dom
long int bitangents28[28]
field_theory::finite_field * F
schlaefli labeling of objects in cubic surfaces with 27 lines
std::string * Line_label_tex
void init(int verbose_level)
a collection of combinatorial functions
void set_complement_lint(long int *subset, int subset_size, long int *complement, int &size_complement, int universal_set_size)
void print(std::ostream &ost, std::vector< int > &v)
void print_table_tex(std::ostream &ost)
void dualize(set_of_sets *&S, int verbose_level)
a collection of functions related to sorted vectors
void lint_vec_sort_and_remove_duplicates(long int *v, int &len)
a statistical analysis of data consisting of single integers
int determine_class_by_value(int value)
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_array_tex(std::ostream &ost, int f_backwards)
linear_algebra::linear_algebra * Linear_algebra
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 latex_matrix(std::ostream &ost, int *p)
long int dual_rank_of_line_in_plane(long int line_rank, int verbose_level)
long int line_rank_using_dual_coordinates_in_plane(int *eqn3, int verbose_level)
void adjust_basis(int *V, int *U, int n, int k, int d, int verbose_level)
interface to create latex output files
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)
data_structures::int_vec * Int_vec
void substitute_line(int *coeff_in, int *coeff_out, int *Pt1_coeff, int *Pt2_coeff, int verbose_level)
int evaluate_at_a_point(int *coeff, int *pt_vec)
void vanishing_ideal(long int *Pts, int nb_pts, int &r, int *Kernel, int verbose_level)
#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
the orbiter library for the classification of combinatorial objects