mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-23 21:07:17 +00:00
improved square model in non-hyperbolic geometries
This commit is contained in:
parent
e43d630185
commit
39916901ee
@ -11,7 +11,9 @@ typedef long double precise;
|
|||||||
|
|
||||||
namespace polygonal {
|
namespace polygonal {
|
||||||
|
|
||||||
typedef complex<ld> cld;
|
typedef long double xld;
|
||||||
|
|
||||||
|
typedef complex<xld> cld;
|
||||||
|
|
||||||
int SI = 4;
|
int SI = 4;
|
||||||
ld STAR = 0;
|
ld STAR = 0;
|
||||||
@ -66,6 +68,11 @@ namespace polygonal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pair<ld, ld> compute(ld x, ld y, int prec) {
|
pair<ld, ld> 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) {
|
if(pmodel == mdPolynomial) {
|
||||||
cld z(x,y);
|
cld z(x,y);
|
||||||
cld res (0,0);
|
cld res (0,0);
|
||||||
@ -92,7 +99,7 @@ namespace polygonal {
|
|||||||
|
|
||||||
for(int r=0; r<=2000; r++) {
|
for(int r=0; r<=2000; r++) {
|
||||||
cld z = exp(cld(0, 2*M_PI * r / 2000.0));
|
cld z = exp(cld(0, 2*M_PI * r / 2000.0));
|
||||||
pair<ld,ld> z2 = compute(real(z), imag(z), deg);
|
pair<xld,xld> z2 = compute(real(z), imag(z), deg);
|
||||||
hyperpoint h;
|
hyperpoint h;
|
||||||
h[0] = z2.first * vid.radius;
|
h[0] = z2.first * vid.radius;
|
||||||
h[1] = z2.second * vid.radius;
|
h[1] = z2.second * vid.radius;
|
||||||
|
1
hyper.h
1
hyper.h
@ -971,6 +971,7 @@ namespace polygonal {
|
|||||||
extern int SI;
|
extern int SI;
|
||||||
extern ld STAR;
|
extern ld STAR;
|
||||||
extern int deg;
|
extern int deg;
|
||||||
|
typedef long double xld;
|
||||||
extern ld coefr[MSI], coefi[MSI];
|
extern ld coefr[MSI], coefi[MSI];
|
||||||
extern int maxcoef, coefid;
|
extern int maxcoef, coefid;
|
||||||
void solve();
|
void solve();
|
||||||
|
1
init.cpp
1
init.cpp
@ -482,6 +482,7 @@ void initAll() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
firstland = firstland0;
|
firstland = firstland0;
|
||||||
|
polygonal::solve();
|
||||||
}
|
}
|
||||||
|
|
||||||
void finishAll() {
|
void finishAll() {
|
||||||
|
@ -476,6 +476,15 @@ ld glhypot2(glvertex a, glvertex b) {
|
|||||||
void drawpolyline(polytodraw& p) {
|
void drawpolyline(polytodraw& p) {
|
||||||
auto& pp = p.u.poly;
|
auto& pp = p.u.poly;
|
||||||
|
|
||||||
|
if(!hyperbolic && among(pmodel, mdPolygonal, mdPolynomial)) {
|
||||||
|
bool any = false;
|
||||||
|
for(int i=0; i<pp.cnt; i++) {
|
||||||
|
hyperpoint h1 = pp.V * glhr::gltopoint((*pp.tab)[pp.offset+i]);
|
||||||
|
if(h1[2] > 0) any = true;
|
||||||
|
}
|
||||||
|
if(!any) return;
|
||||||
|
}
|
||||||
|
|
||||||
if(sphere && pp.tinf && pp.cnt > 3) {
|
if(sphere && pp.tinf && pp.cnt > 3) {
|
||||||
int i = pp.cnt;
|
int i = pp.cnt;
|
||||||
pp.cnt = 3;
|
pp.cnt = 3;
|
||||||
|
Loading…
Reference in New Issue
Block a user