From c993e80a18d955a2866cff672499684531f378b7 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Tue, 27 Nov 2018 16:15:08 +0100 Subject: [PATCH] cellrelmatrix and cellgfxdist implemented efficiently for euwrap geometries --- geometry2.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/geometry2.cpp b/geometry2.cpp index 59b4ec2d..454e58ee 100644 --- a/geometry2.cpp +++ b/geometry2.cpp @@ -363,6 +363,10 @@ void virtualRebaseSimple(heptagon*& base, transmatrix& at) { } double cellgfxdist(cell *c, int i) { + if(euclid) { + if(c->type == 8 && (i&1)) return eurad * sqrt(2); + return eurad; + } if(NONSTDVAR || archimedean) return hdist0(tC0(calc_relative_matrix(c->move(i), c, i))); return !BITRUNCATED ? tessf : (c->type == 6 && (i&1)) ? hexhexdist : crossf; } @@ -370,7 +374,10 @@ double cellgfxdist(cell *c, int i) { transmatrix cellrelmatrix(cell *c, int i) { if(NONSTDVAR || archimedean) return calc_relative_matrix(c->move(i), c, i); double d = cellgfxdist(c, i); - return ddspin(c, i) * xpush(d) * iddspin(c->move(i), c->c.spin(i), euclid ? 0 : M_PI); + transmatrix T = ddspin(c, i) * xpush(d); + if(c->c.mirror(i)) T = T * Mirror; + T = T * iddspin(c->move(i), c->c.spin(i), M_PI); + return T; } double randd() { return (rand() + .5) / (RAND_MAX + 1.); }