From 64da329f8efcb35d5b9284e0008b53c886e3acde Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Fri, 23 Nov 2018 23:46:26 +0100 Subject: [PATCH] added new quotient spaces: Bring's, Schmutz's M(2), Schmutz's M(3) --- cell.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++ classes.cpp | 3 +++ classes.h | 3 ++- geometry2.cpp | 2 +- goldberg.cpp | 4 +++- hyper.h | 2 +- 6 files changed, 62 insertions(+), 4 deletions(-) diff --git a/cell.cpp b/cell.cpp index 9d0493eb..c7310a97 100644 --- a/cell.cpp +++ b/cell.cpp @@ -776,6 +776,58 @@ struct hrmap_quotient : hrmap { break; } + case gBring: { + connections = { +/* 000 */ 5, 92, 46, 33, 14, +/* 001 */ 0, 62, 56, 38, 24, +/* 002 */ 15, 97, 76, 63, 4, +/* 003 */ 10, 32, 86, 68, 29, +/* 004 */ 25, 67, 106, 93, 9, +/* 005 */ 20, 37, 116, 98, 19, +/* 006 */ 35, 102, 16, 3, 44, +/* 007 */ 30, 72, 26, 8, 54, +/* 008 */ 45, 107, 66, 73, 34, +/* 009 */ 40, 2, 81, 78, 59, +/* 010 */ 55, 77, 96, 103, 39, +/* 011 */ 50, 7, 111, 108, 49, +/* 012 */ 65, 112, 6, 13, 74, +/* 013 */ 60, 42, 21, 18, 84, +/* 014 */ 75, 117, 36, 43, 64, +/* 015 */ 70, 12, 51, 48, 89, +/* 016 */ 85, 47, 91, 113, 69, +/* 017 */ 80, 17, 101, 118, 79, +/* 018 */ 95, 82, 1, 23, 104, +/* 019 */ 90, 52, 11, 28, 114, +/* 020 */ 105, 87, 31, 53, 94, +/* 021 */ 100, 22, 41, 58, 119, +/* 022 */ 115, 57, 61, 83, 99, +/* 023 */ 110, 27, 71, 88, 109, + }; + break; + } + + case gSchmutzM2: { + connections = { + 23, 47, 27, 14, 38, 30, 17, 41, 33, 20, 44, 24, + 35, 39, 3, 26, 42, 6, 29, 45, 9, 32, 36, 0, + 11, 43, 15, 2, 46, 18, 5, 37, 21, 8, 40, 12, + 22, 31, 4, 13, 34, 7, 16, 25, 10, 19, 28, 1, + }; + break; + } + + case gSchmutzM3: { + connections = { + 23, 47, 64, 28, 15, 39, 68, 32, 19, 43, 60, 24, + 35, 52, 40, 4, 27, 56, 44, 8, 31, 48, 36, 0, + 11, 71, 57, 16, 3, 63, 49, 20, 7, 67, 53, 12, + 22, 59, 69, 5, 14, 51, 61, 9, 18, 55, 65, 1, + 21, 30, 62, 41, 13, 34, 66, 45, 17, 26, 70, 37, + 10, 42, 50, 29, 2, 46, 54, 33, 6, 38, 58, 25, + }; + break; + } + default: break; } diff --git a/classes.cpp b/classes.cpp index 5bc1d273..faa5a633 100644 --- a/classes.cpp +++ b/classes.cpp @@ -1683,6 +1683,9 @@ geometryinfo ginf[gGUARD] = { {"binary tiling", "binary", 7, 3, 0, gcHyperbolic, 0, {{7, 5}}, eVariation::pure}, {"Archimedean", "A", 7, 3, 0, gcHyperbolic, 0, {{7, 5}}, eVariation::pure}, {"Macbeath surface", "Macbeath", 7, 3, qSMALL, gcHyperbolic, 0x18800, {{7, 5}}, eVariation::bitruncated}, + {"Bring's Surface", "Bring", 5, 4, qSMALL, gcHyperbolic, 0x18A00, {{6, 4}}, eVariation::bitruncated}, + {"Schmutz's M(3)", "M3", 12, 3, qSMALL, gcHyperbolic, 0x18C00, {{4, 2}}, eVariation::bitruncated}, + {"Schmutz's M(4)", "M4", 12, 3, qSMALL, gcHyperbolic, 0x18E00, {{4, 2}}, eVariation::bitruncated}, }; #define X3(x) x, x, x diff --git a/classes.h b/classes.h index 4e4b550d..6d84b377 100644 --- a/classes.h +++ b/classes.h @@ -200,7 +200,8 @@ enum eLand { laNone, laBarrier, laCrossroads, laDesert, laIce, laCaves, laJungle enum eGeometry { gNormal, gEuclid, gSphere, gElliptic, gZebraQuotient, gFieldQuotient, gTorus, gOctagon, g45, g46, g47, gSmallSphere, gTinySphere, gEuclidSquare, gSmallElliptic, - gKleinQuartic, gBolza, gBolza2, gMinimal, gBinaryTiling, gArchimedean, gMacbeath, + gKleinQuartic, gBolza, gBolza2, gMinimal, gBinaryTiling, gArchimedean, + gMacbeath, gBring, gSchmutzM2, gSchmutzM3, gGUARD}; enum eGeometryClass { gcHyperbolic, gcEuclid, gcSphere }; diff --git a/geometry2.cpp b/geometry2.cpp index b38baa89..54e918c1 100644 --- a/geometry2.cpp +++ b/geometry2.cpp @@ -145,7 +145,7 @@ transmatrix calc_relative_matrix(cell *c2, cell *c1, const hyperpoint& point_hin int sp = h2->c.spin(d); return gm * heptmove[sp] * spin(2*M_PI*d/S7) * where; } - if(geometry == gFieldQuotient) { + if(among(geometry, gFieldQuotient, gBring, gMacbeath)) { int bestdist = 1000, bestd = 0; for(int d=0; dmove(d)->c7, c1); diff --git a/goldberg.cpp b/goldberg.cpp index a34c611e..63921ee1 100644 --- a/goldberg.cpp +++ b/goldberg.cpp @@ -525,7 +525,7 @@ namespace hr { namespace gp { return normalize(spin(2*M_PI*sp/S7) * cornmul(T, corner)); } - transmatrix Tf[8][32][32][6]; + transmatrix Tf[MAX_EDGE][32][32][6]; transmatrix corners; @@ -594,6 +594,8 @@ namespace hr { namespace gp { base_distlimit = (base_distlimit + log(scale) / log(2.618)) / scale; else base_distlimit = 3 * max(param.first, param.second) + 2 * min(param.first, param.second); + if(S7 == 12) + base_distlimit = 2 * param.first + 2 * param.second + 1; if(base_distlimit > SEE_ALL) base_distlimit = SEE_ALL; prepare_matrices(); diff --git a/hyper.h b/hyper.h index 2b67bd45..afa79b57 100644 --- a/hyper.h +++ b/hyper.h @@ -3480,7 +3480,7 @@ namespace gp { extern int last_dir(cell *c); extern void configure(); extern ld alpha; - extern transmatrix Tf[8][32][32][6]; + extern transmatrix Tf[MAX_EDGE][32][32][6]; loc operator+(loc e1, loc e2); loc operator-(loc e1, loc e2);