1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2026-05-22 14:02:05 +00:00

backed-map:: implemented relative_backed_matrix

This commit is contained in:
Zeno Rogue
2026-04-18 20:45:51 +02:00
parent 9e8784903f
commit b1fd9bac57
2 changed files with 22 additions and 8 deletions
+21
View File
@@ -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<eGeometry> g(geometry, gBinary3);
dynamicval<hrmap*> cm(currentmap, current_altmap);
return currentmap->relative_matrix(h2, h1, hint);
}
#endif
if(mhyperbolic && GDIM == 2) {
dynamicval<int> uc(cgip->use_count, cgip->use_count+1);
dynamicval<eGeometry> g(geometry, gNormal);
dynamicval<eVariation> gv(variation, eVariation::pure);
dynamicval<geometry_information*> gi(cgip, find_alt_cgip());
dynamicval<hrmap*> cm(currentmap, current_altmap);
return currentmap->relative_matrix(h2, h1, hint);
}
return Id;
}
bool show_map_stress;
void draw_stress_map() {
+1 -8
View File
@@ -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<eGeometry> g(geometry, gBinary3);
dynamicval<hrmap*> 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;