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:
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user