17namespace layer1_foundations {
18namespace algebraic_geometry {
51 long int *Arc6,
long int line1,
long int line2,
60 int f_v = (verbose_level >= 1);
61 int f_vv = (verbose_level >= 2);
65 int Transversals[4 * 8];
70 cout <<
"arc_lifting_with_two_lines::create_surface" << endl;
71 cout <<
"line1=" <<
line1 <<
" line2=" <<
line2 << endl;
94 cout <<
"arc_lifting_with_two_lines::create_surface "
95 "the arc does not lie in a plane" << endl;
96 cout <<
"rk=" << rk << endl;
105 cout <<
"arc_lifting_with_two_lines::create_surface "
111 cout <<
"arc_lifting_with_two_lines::create_surface both lines are zero, "
112 "meaning we will pick our own lines" << endl;
115 cout <<
"arc_lifting_with_two_lines::create_surface before Surf->P->find_two_lines_for_arc_lifting" << endl;
121 cout <<
"arc_lifting_with_two_lines::create_surface after Surf->P->find_two_lines_for_arc_lifting" << endl;
126 cout <<
"arc_lifting_with_two_lines::create_surface line1=" <<
line1 << endl;
127 cout <<
"arc_lifting_with_two_lines::create_surface line2=" <<
line2 << endl;
134 cout <<
"arc_lifting_with_two_lines::create_surface" << endl;
135 cout <<
"line1=" <<
line1 <<
":" << endl;
137 cout <<
"line2=" <<
line2 <<
":" << endl;
145 cout <<
"arc_lifting_with_two_lines::create_surface "
146 "the two lines are not skew" << endl;
161 cout <<
"P[0]=" <<
P[0] << endl;
162 cout <<
"P[1]=" <<
P[1] << endl;
171 for (i = 0; i < 6; i++) {
173 if (a ==
P[0] || a ==
P[1]) {
179 cout <<
"arc_lifting_with_two_lines::create_surface "
196 cout <<
"arc_lifting_with_two_lines::create_surface "
204 cout <<
"arc_lifting_with_two_lines::create_surface "
211 cout <<
"arc_lifting_with_two_lines::create_surface "
219 cout <<
"arc_lifting_with_two_lines::create_surface "
220 "rearranged arc:" << endl;
226 for (i = 0; i < 4; i++) {
234 cout <<
"arc_lifting_with_two_lines::create_surface "
235 "transversal:" << endl;
238 cout <<
"Transversals:" << endl;
258 cout <<
"arc_lifting_with_two_lines::create_surface "
294 int pt1 = 0, pt2 = 0;
300 for (i1 = 0; i1 <=
q; i1++) {
305 cout <<
"found point pt1 which is not on "
306 "transversal_01, i1=" << i1 << endl;
312 cout <<
"arc_lifting_with_two_lines::create_surface could "
313 "not find first point on line b1" << endl;
316 for (i2 = i1 + 1; i2 <=
q; i2++) {
324 cout <<
"arc_lifting_with_two_lines::create_surface could "
325 "not find second point on line b1" << endl;
330 cout <<
"arc_lifting_with_two_lines::create_surface "
331 "pt1=" << pt1 <<
" pt2=" << pt2 << endl;
335 int pt3 = 0, pt4 = 0;
341 for (j1 = 0; j1 <=
q; j1++) {
348 cout <<
"pt3 == P[1], skipping" << endl;
355 cout <<
"pt3 == pt1, skipping" << endl;
366 cout <<
"arc_lifting_with_two_lines::create_surface "
367 "j1 == q + 1, picking pt1" << endl;
372 for (j2 = 0; j2 <=
q; j2++) {
391 cout <<
"arc_lifting_with_two_lines::create_surface "
392 "j2 == q + 1, picking pt2" << endl;
398 cout <<
"arc_lifting_with_two_lines::create_surface "
399 "pt3=" << pt3 <<
" pt4=" << pt4 << endl;
410 cout <<
"arc_lifting_with_two_lines::create_surface "
412 cout <<
"basis_a2:" << endl;
435 long int five_pts[5];
436 long int double_six_special[12];
437 long int double_six[12];
446 cout <<
"arc_lifting_with_two_lines::create_surface "
452 cout <<
"arc_lifting_with_two_lines::create_surface "
453 "before Surf->create_double_six_from_five_"
454 "lines_with_a_common_transversal" << endl;
457 five_pts, double_six_special,
460 cout <<
"arc_lifting_with_two_lines::create_surface "
461 "after Surf->create_double_six_from_five_"
462 "lines_with_a_common_transversal" << endl;
471 cout <<
"arc_lifting_with_two_lines::create_surface "
472 "double_six_special=";
476 double_six[0] = double_six_special[5];
477 double_six[1] = double_six_special[4];
478 double_six[2] = double_six_special[0];
479 double_six[3] = double_six_special[1];
480 double_six[4] = double_six_special[2];
481 double_six[5] = double_six_special[3];
482 double_six[6 + 0] = double_six_special[6 + 5];
483 double_six[6 + 1] = double_six_special[6 + 4];
484 double_six[6 + 2] = double_six_special[6 + 0];
485 double_six[6 + 3] = double_six_special[6 + 1];
486 double_six[6 + 4] = double_six_special[6 + 2];
487 double_six[6 + 5] = double_six_special[6 + 3];
490 cout <<
"arc_lifting_with_two_lines::create_surface "
497 lines27 + 12, verbose_level - 10);
500 cout <<
"arc_lifting_with_two_lines::create_surface "
field_theory::finite_field * F
arc_lifting_with_two_lines()
void create_surface(surface_domain *Surf, long int *Arc6, long int line1, long int line2, int verbose_level)
~arc_lifting_with_two_lines()
cubic surfaces in PG(3,q) with 27 lines
geometry::projective_space * P
int create_double_six_from_five_lines_with_a_common_transversal(long int *five_pts, long int *double_six, int verbose_level)
Given a five-plus-one five_pts[5], complete the double-six.
void unrank_line(int *v, long int rk)
void create_the_fifteen_other_lines(long int *double_six, long int *fifteen_other_lines, int verbose_level)
Given a double six in double_six[12], compute the 15 remaining lines cij.
ring_theory::homogeneous_polynomial_domain * Poly3_4
field_theory::finite_field * F
long int rank_plane(int *v)
void build_cubic_surface_from_lines(int len, long int *S, int *coeff, int verbose_level)
void matrix_print(int *p, int m, int n)
linear_algebra::linear_algebra * Linear_algebra
various functions related to geometries
void find_two_lines_for_arc_lifting(projective_space *P, long int P1, long int P2, long int &line1, long int &line2, int verbose_level)
int point_of_intersection_of_a_line_and_a_plane_in_three_space(long int line, int plane, int verbose_level)
long int transversal_to_two_skew_lines_through_a_point(long int line1, long int line2, int pt, int verbose_level)
void unrank_points(int *v, long int *Rk, int sz)
int is_incident(int pt, int line)
long int line_through_two_points(long int p1, long int p2)
int create_point_on_line(long int line_rk, int pt_rk, int verbose_level)
void unrank_point(int *v, long int rk)
int Gauss_simple(int *A, int m, int n, int *base_cols, int verbose_level)
data_structures::int_vec * Int_vec
int evaluate_at_a_point_by_rank(int *coeff, int pt)
void print_equation(std::ostream &ost, int *coeffs)
#define Lint_vec_copy(A, B, C)
#define Lint_vec_print(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