From 2c073c1ec11bccfc044b177a121ecb7e537e2df1 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Wed, 14 Aug 2019 18:58:42 +0200 Subject: [PATCH] cleanup of mercator_fix --- drawing.cpp | 31 +++++++++++-------------------- hyper.h | 2 ++ util.cpp | 3 +++ 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/drawing.cpp b/drawing.cpp index 63eb32cb..d5310efd 100644 --- a/drawing.cpp +++ b/drawing.cpp @@ -718,8 +718,6 @@ void fixMercator(bool tinf) { for(int i = 0; iradius / M_PI, dmax = vid.stretch * current_display->radius / M_PI; - // for(int i = 0; i hperiod) glcoords[0][mercator_coord] -= mercator_period; - // } + glcoords[0][mercator_coord] -= round_nearest(glcoords[0][mercator_coord], mercator_period); ld first = glcoords[0][mercator_coord]; ld next = first; @@ -748,10 +743,7 @@ void fixMercator(bool tinf) { ld mincoord = first, maxcoord = first; for(int i = 0; i next + hperiod) - glcoords[i][mercator_coord] -= mercator_period; + glcoords[i][mercator_coord] -= round_nearest(glcoords[i][mercator_coord]-next, mercator_period); next = glcoords[i][mercator_coord]; mincoord = min(mincoord, glcoords[i][mercator_coord]); maxcoord = max(maxcoord, glcoords[i][mercator_coord]); @@ -762,14 +754,12 @@ void fixMercator(bool tinf) { return; } - ld last = first; - while(last < next - hperiod) last += mercator_period; - while(last > next + hperiod) last -= mercator_period; + ld last = first - round_nearest(first-next, mercator_period); - if(first == last) { - while(mincoord > cmin) + if(abs(first - last) < 1e-6) { + while(mincoord > cmin && mercator_loop_min > -100) mercator_loop_min--, mincoord -= mercator_period; - while(maxcoord < cmax) + while(maxcoord < cmax && mercator_loop_max < +100) mercator_loop_max++, maxcoord += mercator_period; if(mdPseudocylindrical()) for(int i = 0; i cmin) { - for(int i=0; i 0) return int(x+.5); else return -int(.5-x); } +EX ld round_nearest(ld x, ld multiple_of) { return multiple_of * round_nearest(x / multiple_of); } + EX int gcd(int i, int j) { return i ? gcd(j%i, i) : j; }