Orbiter 2022
Combinatorial Objects
eckardt_point.cpp
Go to the documentation of this file.
1// eckardt_point.cpp
2//
3// Anton Betten
4// January 12, 2017
5
6#include "foundations.h"
7
8using namespace std;
9
10
11namespace orbiter {
12namespace layer1_foundations {
13namespace algebraic_geometry {
14
15
17{
18 null();
19}
20
22{
23 freeself();
24}
25
27{
28}
29
31{
32 null();
33}
34
36{
37 int t, i, j;
39
40 if (len == 3) {
41 cout << "E_{";
42 for (t = 0; t < 3; t++) {
43 Combi.k2ij(index[t], i, j, 6);
44 cout << i + 1 << j + 1;
45 if (t < 2) {
46 cout << ",";
47 }
48 }
49 cout << "}" << endl;
50 }
51 else if (len == 2) {
52 cout << "E_{" << index[0] + 1 << index[1] + 1 << "}" << endl;
53 }
54 else {
55 cout << "eckardt_point::print len is illegal" << endl;
56 exit(1);
57 }
58}
59
60void eckardt_point::latex(ostream &ost)
61{
62 int t, i, j;
64
65 if (len == 3) {
66 ost << "E_{";
67 for (t = 0; t < 3; t++) {
68 Combi.k2ij(index[t], i, j, 6);
69 ost << i + 1 << j + 1;
70 if (t < 2) {
71 ost << ",";
72 }
73 }
74 ost << "}" << endl;
75 }
76 else if (len == 2) {
77 ost << "E_{" << index[0] + 1 << index[1] + 1 << "}" << endl;
78 }
79 else {
80 cout << "eckardt_point::latex len is illegal" << endl;
81 exit(1);
82 }
83}
84
86{
87 int t, i, j;
89
90 if (len == 3) {
91 for (t = 0; t < 3; t++) {
92 Combi.k2ij(index[t], i, j, 6);
93 ost << i + 1 << j + 1;
94 if (t < 2) {
95 ost << ",";
96 }
97 }
98 }
99 else if (len == 2) {
100 ost << index[0] + 1 << index[1] + 1;
101 }
102 else {
103 cout << "eckardt_point::latex_index_only len is illegal" << endl;
104 exit(1);
105 }
106}
107
109{
110 int t, i, j;
112
113 str[0] = 0;
114 if (len == 3) {
115 sprintf(str + strlen(str), "E_{");
116 for (t = 0; t < 3; t++) {
117 Combi.k2ij(index[t], i, j, 6);
118 sprintf(str + strlen(str), "%d%d", i + 1, j + 1);
119 if (t < 2) {
120 sprintf(str + strlen(str), ",");
121 }
122 }
123 sprintf(str + strlen(str), "}");
124 }
125 else if (len == 2) {
126 sprintf(str + strlen(str), "E_{%d%d}", index[0] + 1, index[1] + 1);
127 }
128 else {
129 cout << "eckardt_point::latex len is illegal" << endl;
130 exit(1);
131 }
132}
133
135{
136 int t, i, j;
138
139 str[0] = 0;
140 if (len == 3) {
141 //sprintf(str + strlen(str), "{");
142 for (t = 0; t < 3; t++) {
143 Combi.k2ij(index[t], i, j, 6);
144 sprintf(str + strlen(str), "%d%d", i + 1, j + 1);
145 if (t < 2) {
146 sprintf(str + strlen(str), ",");
147 }
148 }
149 //sprintf(str + strlen(str), "}");
150 }
151 else if (len == 2) {
152 sprintf(str + strlen(str), "%d%d", index[0] + 1, index[1] + 1);
153 }
154 else {
155 cout << "eckardt_point::latex len is illegal" << endl;
156 exit(1);
157 }
158}
159
160
161
162void eckardt_point::init2(int i, int j)
163{
164 len = 2;
165 index[0] = i;
166 index[1] = j;
167}
168
169void eckardt_point::init3(int ij, int kl, int mn)
170{
171 len = 3;
172 index[0] = ij;
173 index[1] = kl;
174 index[2] = mn;
175}
176
177void eckardt_point::init6(int i, int j, int k, int l, int m, int n)
178{
180
181 len = 3;
182 index[0] = Combi.ij2k(i, j, 6);
183 index[1] = Combi.ij2k(k, l, 6);
184 index[2] = Combi.ij2k(m, n, 6);
185}
186
188{
190
191 if (rk < 30) {
192 len = 2;
193 Combi.ordered_pair_unrank(rk, index[0], index[1], 6);
194 }
195 else {
196 int i, j, k, l, m, n;
197
198 len = 3;
199 rk -= 30;
200 Combi.unordered_triple_pair_unrank(rk, i, j, k, l, m, n);
201 index[0] = Combi.ij2k(i, j, 6);
202 index[1] = Combi.ij2k(k, l, 6);
203 index[2] = Combi.ij2k(m, n, 6);
204 }
205}
206
207
209{
211
212 if (len == 2) {
213 three_lines[0] = S->Schlaefli->line_ai(index[0]);
214 three_lines[1] = S->Schlaefli->line_bi(index[1]);
215 three_lines[2] = S->Schlaefli->line_cij(index[0], index[1]);
216 }
217 else if (len == 3) {
218 int i, j;
219
220 Combi.k2ij(index[0], i, j, 6);
221 three_lines[0] = S->Schlaefli->line_cij(i, j);
222 Combi.k2ij(index[1], i, j, 6);
223 three_lines[1] = S->Schlaefli->line_cij(i, j);
224 Combi.k2ij(index[2], i, j, 6);
225 three_lines[2] = S->Schlaefli->line_cij(i, j);
226 }
227 else {
228 cout << "eckardt_point::three_lines len must be 2 or 3" << endl;
229 exit(1);
230 }
231}
232
234{
235 int a;
237
238 if (len == 2) {
239 a = Combi.ordered_pair_rank(index[0], index[1], 6);
240 return a;
241 }
242 else if (len == 3) {
243 int i, j, k, l, m, n;
244
245 Combi.k2ij(index[0], i, j, 6);
246 Combi.k2ij(index[1], k, l, 6);
247 Combi.k2ij(index[2], m, n, 6);
248 a = Combi.unordered_triple_pair_rank(i, j, k, l, m, n);
249 return 30 + a;
250 }
251 else {
252 cout << "eckardt_point::rank len must be 2 or 3" << endl;
253 exit(1);
254 }
255}
256
258 int &i, int &j, int &k, int &l, int &m, int &n)
259{
261
262 if (rk < 30) {
263 len = 2;
264 Combi.ordered_pair_unrank(rk, index[0], index[1], 6);
265 }
266 else {
267 rk -= 30;
268 Combi.unordered_triple_pair_unrank(rk, i, j, k, l, m, n);
269 index[0] = Combi.ij2k(i, j, 6);
270 index[1] = Combi.ij2k(k, l, 6);
271 index[2] = Combi.ij2k(m, n, 6);
272 }
273}
274
275
276}}}
277
void unrank(int rk, int &i, int &j, int &k, int &l, int &m, int &n)
void init6(int i, int j, int k, int l, int m, int n)
void three_lines(surface_domain *S, int *three_lines)
int unordered_triple_pair_rank(int i, int j, int k, int l, int m, int n)
void unordered_triple_pair_unrank(int rk, int &i, int &j, int &k, int &l, int &m, int &n)
the orbiter library for the classification of combinatorial objects