mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-12-24 17:10:36 +00:00
single-cell quotient spaces
This commit is contained in:
parent
7e2e4928e9
commit
9d0d0fb182
@ -723,7 +723,7 @@ enum eGeometry {
|
|||||||
gKiteDart2, gKiteDart3, gNil, gProduct, gRotSpace,
|
gKiteDart2, gKiteDart3, gNil, gProduct, gRotSpace,
|
||||||
gTernary, gNIH, gSolN, gInfOrder, gSpace336, gSpace344, gCrystal344,
|
gTernary, gNIH, gSolN, gInfOrder, gSpace336, gSpace344, gCrystal344,
|
||||||
gArnoldCat, gArbitrary, gInfOrder4, gCrystal534,
|
gArnoldCat, gArbitrary, gInfOrder4, gCrystal534,
|
||||||
gSpace535, gSpace536, gSeifertCover,
|
gSpace535, gSpace536, gSeifertCover, gSeifertWeber, gHomologySphere,
|
||||||
gGUARD};
|
gGUARD};
|
||||||
|
|
||||||
enum eGeometryClass { gcHyperbolic, gcEuclid, gcSphere, gcSolNIH, gcNil, gcProduct, gcSL2 };
|
enum eGeometryClass { gcHyperbolic, gcEuclid, gcSphere, gcSolNIH, gcNil, gcProduct, gcSL2 };
|
||||||
@ -785,6 +785,7 @@ static const flagtype qNIH = 65536;
|
|||||||
static const flagtype qIDEAL = 131072;
|
static const flagtype qIDEAL = 131072;
|
||||||
static const flagtype qHUGE_BOUNDED = 262144;
|
static const flagtype qHUGE_BOUNDED = 262144;
|
||||||
static const flagtype qOPTQ = Flag(19);
|
static const flagtype qOPTQ = Flag(19);
|
||||||
|
static const flagtype qSINGLE = Flag(20);
|
||||||
|
|
||||||
// note: dnext assumes that x&7 equals 7
|
// note: dnext assumes that x&7 equals 7
|
||||||
static const int SEE_ALL = 50;
|
static const int SEE_ALL = 50;
|
||||||
@ -807,6 +808,8 @@ static const flagtype qsSMALLBF = qsSMALLB | qsFIELD | qANYQ;
|
|||||||
static const flagtype qsSMALLBE = qsSMALLB | qELLIPTIC | qANYQ;
|
static const flagtype qsSMALLBE = qsSMALLB | qELLIPTIC | qANYQ;
|
||||||
static const flagtype qsBP = qBINARY | qKITE;
|
static const flagtype qsBP = qBINARY | qKITE;
|
||||||
|
|
||||||
|
static const flagtype qsSINGLE = qANYQ | qSMALL | qBOUNDED | qSINGLE;
|
||||||
|
|
||||||
EX geometryinfo1 giEuclid2 = { gcEuclid, 2, 2, 3, {1,1, 0,0 } };
|
EX geometryinfo1 giEuclid2 = { gcEuclid, 2, 2, 3, {1,1, 0,0 } };
|
||||||
EX geometryinfo1 giHyperb2 = { gcHyperbolic, 2, 2, 3, {1,1,-1,0 } };
|
EX geometryinfo1 giHyperb2 = { gcHyperbolic, 2, 2, 3, {1,1,-1,0 } };
|
||||||
EX geometryinfo1 giSphere2 = { gcSphere, 2, 2, 3, {1,1,+1,0 } };
|
EX geometryinfo1 giSphere2 = { gcSphere, 2, 2, 3, {1,1,+1,0 } };
|
||||||
@ -893,6 +896,8 @@ EX vector<geometryinfo> ginf = {
|
|||||||
{"{5,3,5}","none", "{5,3,5} hyperbolic honeycomb", "535", 12, 5, 0, giHyperb3, 0x31400, {{7, 2}}, eVariation::pure},
|
{"{5,3,5}","none", "{5,3,5} hyperbolic honeycomb", "535", 12, 5, 0, giHyperb3, 0x31400, {{7, 2}}, eVariation::pure},
|
||||||
{"{5,3,6}","none", "{5,3,6} hyperbolic honeycomb", "536", 12, 6, qIDEAL, giHyperb3, 0x31400, {{7, 2}}, eVariation::pure},
|
{"{5,3,6}","none", "{5,3,6} hyperbolic honeycomb", "536", 12, 6, qIDEAL, giHyperb3, 0x31400, {{7, 2}}, eVariation::pure},
|
||||||
{"{5,3,5}","SWh", "{5,3,5} quotient", "535c", 12, 5, qsSMALLB | qANYQ, giHyperb3, 0x31400, {{7, 2}}, eVariation::pure},
|
{"{5,3,5}","SWh", "{5,3,5} quotient", "535c", 12, 5, qsSMALLB | qANYQ, giHyperb3, 0x31400, {{7, 2}}, eVariation::pure},
|
||||||
|
{"{5,3,5}","SW", "Seifert-Weber space", "535s", 12, 5, qsSINGLE, giHyperb3, 0x31400, {{7, 2}}, eVariation::pure},
|
||||||
|
{"{5,3,3}","SW", "Poincaré homology sphere", "533s", 12, 3, qsSINGLE, giSphere3, 0x31400, {{7, 2}}, eVariation::pure},
|
||||||
};
|
};
|
||||||
// bits: 9, 10, 15, 16, (reserved for later) 17, 18
|
// bits: 9, 10, 15, 16, (reserved for later) 17, 18
|
||||||
|
|
||||||
|
17
reg3.cpp
17
reg3.cpp
@ -687,6 +687,20 @@ EX namespace reg3 {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct hrmap_singlecell : hrmap_quotient3 {
|
||||||
|
hrmap_singlecell(ld angle) {
|
||||||
|
generate();
|
||||||
|
initialize(1);
|
||||||
|
tmatrices[0].resize(S7);
|
||||||
|
for(int b=0; b<S7; b++) {
|
||||||
|
allh[0]->c.connect(b, allh[0], (b+S7/2) % S7, false);
|
||||||
|
transmatrix T = reg3::adjmoves[b];
|
||||||
|
hyperpoint p = tC0(T);
|
||||||
|
tmatrices[0][b] = rspintox(p) * xpush(hdist0(p)) * cspin(2, 1, angle) * spintox(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
struct hrmap_seifert_cover : hrmap_quotient3 {
|
struct hrmap_seifert_cover : hrmap_quotient3 {
|
||||||
|
|
||||||
hrmap_seifert_cover() {
|
hrmap_seifert_cover() {
|
||||||
@ -1014,6 +1028,8 @@ EX namespace reg3 {
|
|||||||
|
|
||||||
EX hrmap* new_map() {
|
EX hrmap* new_map() {
|
||||||
if(geometry == gSeifertCover) return new seifert_weber::hrmap_seifert_cover;
|
if(geometry == gSeifertCover) return new seifert_weber::hrmap_seifert_cover;
|
||||||
|
if(geometry == gSeifertWeber) return new seifert_weber::hrmap_singlecell(108*degree);
|
||||||
|
if(geometry == gHomologySphere) return new seifert_weber::hrmap_singlecell(36*degree);
|
||||||
if(quotient && !sphere) return new hrmap_field3;
|
if(quotient && !sphere) return new hrmap_field3;
|
||||||
return new hrmap_reg3;
|
return new hrmap_reg3;
|
||||||
}
|
}
|
||||||
@ -1039,6 +1055,7 @@ EX int celldistance(cell *c1, cell *c2) {
|
|||||||
|
|
||||||
EX bool pseudohept(cell *c) {
|
EX bool pseudohept(cell *c) {
|
||||||
auto m = regmap();
|
auto m = regmap();
|
||||||
|
if(cgflags & qSINGLE) return true;
|
||||||
if(sphere) {
|
if(sphere) {
|
||||||
hyperpoint h = tC0(m->relative_matrix(c->master, regmap()->origin, C0));
|
hyperpoint h = tC0(m->relative_matrix(c->master, regmap()->origin, C0));
|
||||||
if(S7 == 12) {
|
if(S7 == 12) {
|
||||||
|
Loading…
Reference in New Issue
Block a user