From 39916901ee775d771138831580d8d0fc7a1f1dac Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Mon, 23 Apr 2018 12:50:51 +0200 Subject: [PATCH] improved square model in non-hyperbolic geometries --- conformal.cpp | 11 +++++++++-- hyper.h | 1 + init.cpp | 1 + polygons.cpp | 9 +++++++++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/conformal.cpp b/conformal.cpp index db90a5c1..c2ea68ca 100644 --- a/conformal.cpp +++ b/conformal.cpp @@ -11,7 +11,9 @@ typedef long double precise; namespace polygonal { - typedef complex cld; + typedef long double xld; + + typedef complex cld; int SI = 4; ld STAR = 0; @@ -66,6 +68,11 @@ namespace polygonal { } pair compute(ld x, ld y, int prec) { + if(x*x+y*y > 1) { + xld r = hypot(x,y); + x /= r; + y /= r; + } if(pmodel == mdPolynomial) { cld z(x,y); cld res (0,0); @@ -92,7 +99,7 @@ namespace polygonal { for(int r=0; r<=2000; r++) { cld z = exp(cld(0, 2*M_PI * r / 2000.0)); - pair z2 = compute(real(z), imag(z), deg); + pair z2 = compute(real(z), imag(z), deg); hyperpoint h; h[0] = z2.first * vid.radius; h[1] = z2.second * vid.radius; diff --git a/hyper.h b/hyper.h index 1c1f7fd0..9fc3c55c 100644 --- a/hyper.h +++ b/hyper.h @@ -971,6 +971,7 @@ namespace polygonal { extern int SI; extern ld STAR; extern int deg; + typedef long double xld; extern ld coefr[MSI], coefi[MSI]; extern int maxcoef, coefid; void solve(); diff --git a/init.cpp b/init.cpp index 8dcdc030..bf285fd2 100644 --- a/init.cpp +++ b/init.cpp @@ -482,6 +482,7 @@ void initAll() { } firstland = firstland0; + polygonal::solve(); } void finishAll() { diff --git a/polygons.cpp b/polygons.cpp index 5b9e2fc8..34f57376 100644 --- a/polygons.cpp +++ b/polygons.cpp @@ -476,6 +476,15 @@ ld glhypot2(glvertex a, glvertex b) { void drawpolyline(polytodraw& p) { auto& pp = p.u.poly; + if(!hyperbolic && among(pmodel, mdPolygonal, mdPolynomial)) { + bool any = false; + for(int i=0; i 0) any = true; + } + if(!any) return; + } + if(sphere && pp.tinf && pp.cnt > 3) { int i = pp.cnt; pp.cnt = 3;