// Schmutz's Surface generator // Copyright (C) 2018 Zeno Rogue, see 'hyper.cpp' for details #include #include #include #include #include using namespace std; void dualize(vector& t) { int N = t.size(); /* printf("N = %d\n", N); printf("pre dual:\n"); for(int a=0; a tmap(N, -1); vector trmap(N, -1); int s = 0; for(int i=0; i %d\n", oj, j); } if(j != i) printf("not equal\n"), exit(1); // printf("OK\n"); } // for(int a: tmap) printf("%d ", a); printf("\n"); // for(int a: trmap) printf("%d ", a); printf("\n"); vector res(N, -1); for(int i=0; i triangles; for(int a=0; a<12; a++) { triangles.emplace_back(3 * ((a+1) % 12) + 1); triangles.emplace_back(3 * ((a+11) % 12)); triangles.emplace_back(36 + (a%4) * 3 + 2 - (a/4)); } for(int a=0; a<12; a++) triangles.emplace_back(0); for(int a=0; a<36; a++) if(triangles[a] >= 36) triangles[triangles[a]] = a; dualize(triangles); for(int a=0; a<48; a++) { if(a % 12 == 0) printf("\n"); printf("%3d, ", triangles[a]); } printf("\n"); triangles.clear(); for(int a=0; a<12; a++) { triangles.emplace_back(3 * ((a+1) % 12) + 1); triangles.emplace_back(3 * ((a+11) % 12)); triangles.emplace_back(36 + 3 * a); } for(int a=0; a<12; a++) { triangles.emplace_back(3 * a + 2); triangles.emplace_back(36 + (3 * a + 36 - 15 + 2) % 36); triangles.emplace_back(36 + (3 * a + 36 + 15 + 1) % 36); } dualize(triangles); for(int a=0; a<12*2*3; a++) { if(a % 12 == 0) printf("\n"); printf("%3d, ", triangles[a]); } printf("\n"); return 0; }