From b1fd9bac57bfb31a94baed36c1f962284c4ddb35 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Sat, 18 Apr 2026 20:45:51 +0200 Subject: [PATCH] backed-map:: implemented relative_backed_matrix --- backed-map.cpp | 21 +++++++++++++++++++++ reg3.cpp | 9 +-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/backed-map.cpp b/backed-map.cpp index ac144bac..8d1a6b60 100644 --- a/backed-map.cpp +++ b/backed-map.cpp @@ -19,6 +19,8 @@ struct backed_map { void rebase(heptagon*& backer, transmatrix& T); void handle_precision_errors(heptagon *actual); + transmatrix relative_backer_matrix(heptagon *h2, heptagon *h1, const hyperpoint& hint); + geometry_information *alt_cgip[2]; geometry_information *find_alt_cgip(); @@ -189,6 +191,25 @@ void backed_map::swapdim() { alt_cgip[1] = nullptr; } +transmatrix backed_map::relative_backer_matrix(heptagon *h2, heptagon *h1, const hyperpoint& hint) { + #if CAP_BT + if(mhyperbolic && GDIM == 3) { + dynamicval g(geometry, gBinary3); + dynamicval cm(currentmap, current_altmap); + return currentmap->relative_matrix(h2, h1, hint); + } + #endif + if(mhyperbolic && GDIM == 2) { + dynamicval uc(cgip->use_count, cgip->use_count+1); + dynamicval g(geometry, gNormal); + dynamicval gv(variation, eVariation::pure); + dynamicval gi(cgip, find_alt_cgip()); + dynamicval cm(currentmap, current_altmap); + return currentmap->relative_matrix(h2, h1, hint); + } + return Id; + } + bool show_map_stress; void draw_stress_map() { diff --git a/reg3.cpp b/reg3.cpp index e95712b7..4b4bb3ff 100644 --- a/reg3.cpp +++ b/reg3.cpp @@ -1689,14 +1689,7 @@ EX namespace reg3 { transmatrix relative_matrixh(heptagon *h2, heptagon *h1, const hyperpoint& hint) override { auto p1 = bm.where[h1]; auto p2 = bm.where[h2]; - transmatrix T = Id; - #if CAP_BT - if(hyperbolic) { - dynamicval g(geometry, gBinary3); - dynamicval cm(currentmap, bm.current_altmap); - T = currentmap->relative_matrix(p2.first, p1.first, hint); - } - #endif + transmatrix T = bm.relative_backer_matrix(p2.first, p1.first, hint); T = inverse(p1.second) * T * p2.second; if(elliptic && T[LDIM][LDIM] < 0) T = centralsym * T; return T;