mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-30 15:39:54 +00:00
fixed displayspin in syntetic
This commit is contained in:
parent
3ac47f53f5
commit
e1c49a83fa
@ -1011,7 +1011,7 @@ transmatrix change_geometry(const transmatrix& T) {
|
|||||||
push = hdist0(h);
|
push = hdist0(h);
|
||||||
alpha = atan2(h[1], h[0]);
|
alpha = atan2(h[1], h[0]);
|
||||||
if(push == 0) alpha = 0;
|
if(push == 0) alpha = 0;
|
||||||
hyperpoint spinpoint = gpushxto0(h) * T * xpush(1) * C0;
|
hyperpoint spinpoint = gpushxto0(h) * T * xpush0(1);
|
||||||
beta = atan2(spinpoint[1], spinpoint[0]);
|
beta = atan2(spinpoint[1], spinpoint[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,9 +51,9 @@ mesher msh(eGeometry g, int sym, ld main, ld v0, ld v1, ld bspi, ld scale) {
|
|||||||
m.bspi = bspi;
|
m.bspi = bspi;
|
||||||
dynamicval<eGeometry> dg(geometry, g);
|
dynamicval<eGeometry> dg(geometry, g);
|
||||||
|
|
||||||
hyperpoint rot = xpush(v0) * spin(M_PI - M_PI/sym) * xpush(main) * C0;
|
hyperpoint rot = xpush(v0) * xspinpush0(M_PI - M_PI/sym, main);
|
||||||
hyperpoint bnlfar = xpush(v0) * spin(M_PI) * rspintox(rot) * rspintox(rot) * rspintox(rot) * xpush(hdist0(rot)) * C0;
|
hyperpoint bnlfar = xpush(v0) * spin(M_PI) * rspintox(rot) * rspintox(rot) * rspintox(rot) * xpush0(hdist0(rot));
|
||||||
hyperpoint bnrfar = xpush(v0) * spin(M_PI) * spintox(rot) * spintox(rot) * spintox(rot) * xpush(hdist0(rot)) * C0;
|
hyperpoint bnrfar = xpush(v0) * spin(M_PI) * spintox(rot) * spintox(rot) * spintox(rot) * xpush0(hdist0(rot));
|
||||||
|
|
||||||
m.lcorner = xspinpush0 (bspi-M_PI/sym, main);
|
m.lcorner = xspinpush0 (bspi-M_PI/sym, main);
|
||||||
m.rcorner = xspinpush0 (bspi+M_PI/sym, main);
|
m.rcorner = xspinpush0 (bspi+M_PI/sym, main);
|
||||||
|
22
geometry.cpp
22
geometry.cpp
@ -94,13 +94,13 @@ void precalc() {
|
|||||||
ld f = (fmin+fmax) / 2;
|
ld f = (fmin+fmax) / 2;
|
||||||
ld v1=0, v2=0;
|
ld v1=0, v2=0;
|
||||||
if(vertexdegree == 3) {
|
if(vertexdegree == 3) {
|
||||||
hyperpoint H = xpush(f) * C0;
|
hyperpoint H = xpush0(f);
|
||||||
v1 = intval(H, C0), v2 = intval(H, spin(2*M_PI/S7)*H);
|
v1 = intval(H, C0), v2 = intval(H, spin(2*M_PI/S7)*H);
|
||||||
}
|
}
|
||||||
else if(vertexdegree == 4) {
|
else if(vertexdegree == 4) {
|
||||||
hyperpoint H = xpush(f) * C0;
|
hyperpoint H = xpush0(f);
|
||||||
ld opposite = hdist(H, spin(2*M_PI/S7)*H);
|
ld opposite = hdist(H, spin(2*M_PI/S7)*H);
|
||||||
hyperpoint Hopposite = spin(M_PI/S7) * xpush(opposite) * C0;
|
hyperpoint Hopposite = xspinpush0(M_PI/S7, opposite);
|
||||||
v2 = intval(H, Hopposite), v1 = intval(H, C0);
|
v2 = intval(H, Hopposite), v1 = intval(H, C0);
|
||||||
}
|
}
|
||||||
if(sphere ? v1 < v2 : v1 > v2) fmin = f; else fmax = f;
|
if(sphere ? v1 < v2 : v1 > v2) fmin = f; else fmax = f;
|
||||||
@ -112,23 +112,23 @@ void precalc() {
|
|||||||
fmin = 0, fmax = sphere ? M_PI / 2 : 2;
|
fmin = 0, fmax = sphere ? M_PI / 2 : 2;
|
||||||
for(int p=0; p<100; p++) {
|
for(int p=0; p<100; p++) {
|
||||||
ld f = (fmin+fmax) / 2;
|
ld f = (fmin+fmax) / 2;
|
||||||
hyperpoint H = spin(M_PI/S7) * xpush(f) * C0;
|
hyperpoint H = xspinpush0(M_PI/S7, f);
|
||||||
ld v1 = intval(H, C0), v2 = intval(H, xpush(tessf) * C0);
|
ld v1 = intval(H, C0), v2 = intval(H, xpush0(tessf));
|
||||||
if(v1 < v2) fmin = f; else fmax = f;
|
if(v1 < v2) fmin = f; else fmax = f;
|
||||||
}
|
}
|
||||||
hcrossf = fmin;
|
hcrossf = fmin;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
hcrossf = hdist(xpush(tessf) * C0, spin(2*M_PI/S7) * xpush(tessf) * C0) / 2;
|
hcrossf = hdist(xpush0(tessf), xspinpush0(2*M_PI/S7, tessf)) / 2;
|
||||||
}
|
}
|
||||||
crossf = nonbitrunc ? tessf : hcrossf;
|
crossf = nonbitrunc ? tessf : hcrossf;
|
||||||
|
|
||||||
fmin = 0, fmax = tessf;
|
fmin = 0, fmax = tessf;
|
||||||
for(int p=0; p<100; p++) {
|
for(int p=0; p<100; p++) {
|
||||||
ld f = (fmin+fmax) / 2;
|
ld f = (fmin+fmax) / 2;
|
||||||
hyperpoint H = xpush(f) * C0;
|
hyperpoint H = xpush0(f);
|
||||||
hyperpoint H1 = spin(2*M_PI/S7) * H;
|
hyperpoint H1 = spin(2*M_PI/S7) * H;
|
||||||
hyperpoint H2 = xpush(tessf-f) * C0;
|
hyperpoint H2 = xpush0(tessf-f);
|
||||||
ld v1 = intval(H, H1), v2 = intval(H, H2);
|
ld v1 = intval(H, H1), v2 = intval(H, H2);
|
||||||
if(v1 < v2) fmin = f; else fmax = f;
|
if(v1 < v2) fmin = f; else fmax = f;
|
||||||
}
|
}
|
||||||
@ -142,7 +142,7 @@ void precalc() {
|
|||||||
finish:
|
finish:
|
||||||
|
|
||||||
for(int i=0; i<S42; i++)
|
for(int i=0; i<S42; i++)
|
||||||
Crad[i] = spin(2*M_PI*i/S42) * xpush(.4) * C0;
|
Crad[i] = xspinpush0(2*M_PI*i/S42, .4);
|
||||||
for(int d=0; d<S7; d++)
|
for(int d=0; d<S7; d++)
|
||||||
heptmove[d] = spin(-d * ALPHA) * xpush(tessf) * spin(M_PI);
|
heptmove[d] = spin(-d * ALPHA) * xpush(tessf) * spin(M_PI);
|
||||||
|
|
||||||
@ -152,9 +152,9 @@ void precalc() {
|
|||||||
for(int d=0; d<S7; d++) invheptmove[d] = inverse(heptmove[d]);
|
for(int d=0; d<S7; d++) invheptmove[d] = inverse(heptmove[d]);
|
||||||
for(int d=0; d<S7; d++) invhexmove[d] = inverse(hexmove[d]);
|
for(int d=0; d<S7; d++) invhexmove[d] = inverse(hexmove[d]);
|
||||||
|
|
||||||
hexhexdist = hdist(xpush(crossf) * C0, spin(M_PI*2/S7) * xpush(crossf) * C0);
|
hexhexdist = hdist(xpush0(crossf), xspinpush0(M_PI*2/S7, crossf));
|
||||||
|
|
||||||
hexvdist = hdist(tC0(xpush(hexf)), spin(ALPHA/2) * tC0(xpush(hcrossf)));
|
hexvdist = hdist(xpush0(hexf), xspinpush0(ALPHA/2, hcrossf));
|
||||||
|
|
||||||
if(debug_geometry)
|
if(debug_geometry)
|
||||||
printf("S7=%d S6=%d hexf = " LDF" hcross = " LDF" tessf = " LDF" hexshift = " LDF " hexhex = " LDF " hexv = " LDF "\n", S7, S6, hexf, hcrossf, tessf, hexshift,
|
printf("S7=%d S6=%d hexf = " LDF" hcross = " LDF" tessf = " LDF" hexshift = " LDF " hexhex = " LDF " hexv = " LDF "\n", S7, S6, hexf, hcrossf, tessf, hexshift,
|
||||||
|
@ -46,7 +46,7 @@ transmatrix master_relative(cell *c, bool get_inverse) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
transmatrix calc_relative_matrix(cell *c2, cell *c1, int direction_hint) {
|
transmatrix calc_relative_matrix(cell *c2, cell *c1, int direction_hint) {
|
||||||
return calc_relative_matrix(c2, c1, ddspin(c1, direction_hint) * xpush(1e-2) * C0);
|
return calc_relative_matrix(c2, c1, ddspin(c1, direction_hint) * xpush0(1e-2));
|
||||||
}
|
}
|
||||||
|
|
||||||
// target, source, direction from source to target
|
// target, source, direction from source to target
|
||||||
@ -357,7 +357,7 @@ double randd() { return (rand() + .5) / (RAND_MAX + 1.); }
|
|||||||
|
|
||||||
hyperpoint randomPointIn(int t) {
|
hyperpoint randomPointIn(int t) {
|
||||||
while(true) {
|
while(true) {
|
||||||
hyperpoint h = spin(2*M_PI*(randd()-.5)/t) * tC0(xpush(asinh(randd())));
|
hyperpoint h = xspinpush0(2*M_PI*(randd()-.5)/t, asinh(randd()));
|
||||||
double d =
|
double d =
|
||||||
nonbitrunc ? tessf : t == 6 ? hexhexdist : crossf;
|
nonbitrunc ? tessf : t == 6 ? hexhexdist : crossf;
|
||||||
if(hdist0(h) < hdist0(xpush(-d) * h))
|
if(hdist0(h) < hdist0(xpush(-d) * h))
|
||||||
@ -392,7 +392,7 @@ hyperpoint get_corner_position(cell *c, int cid, ld cf) {
|
|||||||
if(syntetic) {
|
if(syntetic) {
|
||||||
if(synt::id_of(c->master) >= synt::N*2) return C0;
|
if(synt::id_of(c->master) >= synt::N*2) return C0;
|
||||||
auto& t = synt::get_triangle(c->master, cid);
|
auto& t = synt::get_triangle(c->master, cid);
|
||||||
return spin(-t.first) * xpush(t.second * 3 / cf) * C0;
|
return xspinpush0(-t.first, t.second * 3 / cf);
|
||||||
}
|
}
|
||||||
if(nonbitrunc) {
|
if(nonbitrunc) {
|
||||||
return ddspin(c,cid,M_PI/S7) * xpush0(hcrossf * 3 / cf);
|
return ddspin(c,cid,M_PI/S7) * xpush0(hcrossf * 3 / cf);
|
||||||
@ -454,7 +454,7 @@ hyperpoint nearcorner(cell *c, int i) {
|
|||||||
auto& t = synt::get_triangle(c->master, i);
|
auto& t = synt::get_triangle(c->master, i);
|
||||||
int id = synt::id_of(c->master);
|
int id = synt::id_of(c->master);
|
||||||
int id1 = synt::get_adj(synt::get_adj(c->master, i), -2).first;
|
int id1 = synt::get_adj(synt::get_adj(c->master, i), -2).first;
|
||||||
return spin(-t.first - M_PI / c->type) * xpush(synt::inradius[id/2] + synt::inradius[id1/2]) * C0;
|
return xspinpush0(-t.first - M_PI / c->type, synt::inradius[id/2] + synt::inradius[id1/2]);
|
||||||
}
|
}
|
||||||
if(binarytiling) {
|
if(binarytiling) {
|
||||||
ld yx = log(2) / 2;
|
ld yx = log(2) / 2;
|
||||||
@ -474,7 +474,7 @@ hyperpoint nearcorner(cell *c, int i) {
|
|||||||
return neis[i];
|
return neis[i];
|
||||||
}
|
}
|
||||||
double d = cellgfxdist(c, i);
|
double d = cellgfxdist(c, i);
|
||||||
return ddspin(c, i) * xpush(d) * C0;
|
return ddspin(c, i) * xpush0(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
hyperpoint farcorner(cell *c, int i, int which) {
|
hyperpoint farcorner(cell *c, int i, int which) {
|
||||||
@ -508,7 +508,7 @@ hyperpoint farcorner(cell *c, int i, int which) {
|
|||||||
int id = synt::id_of(c->master);
|
int id = synt::id_of(c->master);
|
||||||
auto id1 = synt::get_adj(synt::get_adj(c->master, i), -2).first;
|
auto id1 = synt::get_adj(synt::get_adj(c->master, i), -2).first;
|
||||||
int n1 = isize(synt::adjacent[id1]);
|
int n1 = isize(synt::adjacent[id1]);
|
||||||
return spin(-t.first - M_PI / c->type) * xpush(synt::inradius[id/2] + synt::inradius[id1/2]) * spin(M_PI + M_PI/n1*(which?3:-3)) * xpush(synt::circumradius[id1/2]) * C0;
|
return spin(-t.first - M_PI / c->type) * xpush(synt::inradius[id/2] + synt::inradius[id1/2]) * xspinpush0(M_PI + M_PI/n1*(which?3:-3), synt::circumradius[id1/2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return cellrelmatrix(c, i) * get_corner_position(c->move(i), (cellwalker(c, i) + wstep + (which?2:-1)).spin);
|
return cellrelmatrix(c, i) * get_corner_position(c->move(i), (cellwalker(c, i) + wstep + (which?2:-1)).spin);
|
||||||
|
@ -535,8 +535,8 @@ namespace hr { namespace gp {
|
|||||||
cell cc; cc.type = S7;
|
cell cc; cc.type = S7;
|
||||||
return spin(-alpha) * build_matrix(
|
return spin(-alpha) * build_matrix(
|
||||||
C0,
|
C0,
|
||||||
ddspin(&cc, i) * xpush(tessf) * C0,
|
ddspin(&cc, i) * xpush0(tessf),
|
||||||
ddspin(&cc, i+1) * xpush(tessf) * C0
|
ddspin(&cc, i+1) * xpush0(tessf)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
20
graph.cpp
20
graph.cpp
@ -237,7 +237,7 @@ void drawLightning(const transmatrix& V) {
|
|||||||
ld displayspin(cell *c, int d) {
|
ld displayspin(cell *c, int d) {
|
||||||
if(syntetic) {
|
if(syntetic) {
|
||||||
auto& t1 = synt::get_triangle(c->master, d);
|
auto& t1 = synt::get_triangle(c->master, d);
|
||||||
return t1.first + M_PI / c->type;
|
return -(t1.first + M_PI / c->type);
|
||||||
}
|
}
|
||||||
else if(irr::on) {
|
else if(irr::on) {
|
||||||
auto id = irr::cellindex[c];
|
auto id = irr::cellindex[c];
|
||||||
@ -5329,11 +5329,7 @@ void drawmovestar(double dx, double dy) {
|
|||||||
// EUCLIDEAN
|
// EUCLIDEAN
|
||||||
|
|
||||||
#if CAP_QUEUE
|
#if CAP_QUEUE
|
||||||
if(euclid)
|
queueline(tC0(Centered), Centered * xspinpush0(d * M_PI / 4, euclid ? 0.5 : d==0?.7:d==2?.5:.2), col, 3 + vid.linequality);
|
||||||
queueline(tC0(Centered), Centered * xspinpush0(d * M_PI / 4, 0.5) , col, vid.linequality);
|
|
||||||
else
|
|
||||||
// queueline(tC0(Centered), Centered * spin(M_PI*d/4)* xpush(d==0?.7:d==2?.6:.5) * C0, col >> darken);
|
|
||||||
queueline(tC0(Centered), Centered * xspinpush0(M_PI*d/4, d==0?.7:d==2?.5:.2), col, 3 + vid.linequality);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5403,8 +5399,8 @@ void drawfullmap() {
|
|||||||
ptds.clear();
|
ptds.clear();
|
||||||
|
|
||||||
if(pmodel == mdTwoPoint) {
|
if(pmodel == mdTwoPoint) {
|
||||||
queuechr(xpush(+vid.twopoint_param) * C0, vid.xres / 100, 'X', 0xFF0000);
|
queuechr(xpush0(+vid.twopoint_param), vid.xres / 100, 'X', 0xFF0000);
|
||||||
queuechr(xpush(-vid.twopoint_param) * C0, vid.xres / 100, 'X', 0xFF0000);
|
queuechr(xpush0(-vid.twopoint_param), vid.xres / 100, 'X', 0xFF0000);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -5496,10 +5492,10 @@ void drawfullmap() {
|
|||||||
#if CAP_QUEUE
|
#if CAP_QUEUE
|
||||||
int col = darkena(0x80, 0, 0x80);
|
int col = darkena(0x80, 0, 0x80);
|
||||||
queueline(hpxyz(0,0,1), hpxyz(0,0,-vid.alpha), col, 0, PPR_CIRCLE);
|
queueline(hpxyz(0,0,1), hpxyz(0,0,-vid.alpha), col, 0, PPR_CIRCLE);
|
||||||
queueline(xpush(+4)*C0, hpxyz(0,0,0), col, 0, PPR_CIRCLE);
|
queueline(xpush0(+4), hpxyz(0,0,0), col, 0, PPR_CIRCLE);
|
||||||
queueline(xpush(+4)*C0, hpxyz(0,0,-vid.alpha), col, 0, PPR_CIRCLE);
|
queueline(xpush0(+4), hpxyz(0,0,-vid.alpha), col, 0, PPR_CIRCLE);
|
||||||
queueline(xpush(-4)*C0, hpxyz(0,0,0), col, 0, PPR_CIRCLE);
|
queueline(xpush0(-4), hpxyz(0,0,0), col, 0, PPR_CIRCLE);
|
||||||
queueline(xpush(-4)*C0, hpxyz(0,0,-vid.alpha), col, 0, PPR_CIRCLE);
|
queueline(xpush0(-4), hpxyz(0,0,-vid.alpha), col, 0, PPR_CIRCLE);
|
||||||
queueline(hpxyz(-1,0,0), hpxyz(1,0,0), col, 0, PPR_CIRCLE);
|
queueline(hpxyz(-1,0,0), hpxyz(1,0,0), col, 0, PPR_CIRCLE);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -617,7 +617,7 @@ hyperpoint mid_at(hyperpoint h1, hyperpoint h2, ld v) {
|
|||||||
|
|
||||||
hyperpoint mid_at_actual(hyperpoint h, ld v) {
|
hyperpoint mid_at_actual(hyperpoint h, ld v) {
|
||||||
using namespace hyperpoint_vec;
|
using namespace hyperpoint_vec;
|
||||||
return rspintox(h) * xpush(hdist0(h) * v) * C0;
|
return rspintox(h) * xpush0(hdist0(h) * v);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -250,8 +250,8 @@ void applymodel(hyperpoint H, hyperpoint& ret) {
|
|||||||
// map to plane
|
// map to plane
|
||||||
if(false) {
|
if(false) {
|
||||||
auto p = vid.twopoint_param;
|
auto p = vid.twopoint_param;
|
||||||
ld dleft = hdist(H, xpush(-p) * C0);
|
ld dleft = hdist(H, xpush0(-p));
|
||||||
ld dright = hdist(H, xpush(p) * C0);
|
ld dright = hdist(H, xpush0(p));
|
||||||
ld yf = 1, zf = 0;
|
ld yf = 1, zf = 0;
|
||||||
if(zlev_used) {
|
if(zlev_used) {
|
||||||
ld y_orig = asin_auto(H[1]);
|
ld y_orig = asin_auto(H[1]);
|
||||||
|
@ -242,7 +242,7 @@ bool step(int delta) {
|
|||||||
cells.emplace_back();
|
cells.emplace_back();
|
||||||
cellinfo& s = cells.back();
|
cellinfo& s = cells.back();
|
||||||
s.patterndir = -1;
|
s.patterndir = -1;
|
||||||
s.owner = h, s.p = spin(hrand(1000)) * xpush(.01) * C0;
|
s.owner = h, s.p = xspinpush0(hrand(1000), .01);
|
||||||
set_relmatrices(s);
|
set_relmatrices(s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -489,9 +489,7 @@ bool step(int delta) {
|
|||||||
ld dist = hcrossf / 2;
|
ld dist = hcrossf / 2;
|
||||||
ld dists[8];
|
ld dists[8];
|
||||||
for(int i=0; i<S7; i++) {
|
for(int i=0; i<S7; i++) {
|
||||||
dists[i] = hdist(s.p, spin(hexshift - i * ALPHA) * xpush(-hcrossf) * C0);
|
dists[i] = hdist(s.p, xspinpush0(hexshift - i * ALPHA, -hcrossf));
|
||||||
// calc_relative_matrix(s.owner->move(i), s.owner, s.p) * C0);
|
|
||||||
// spin(2 * M_PI * i / S7) * xpush(hcrossf) * C0);
|
|
||||||
if(dists[i] < dist)
|
if(dists[i] < dist)
|
||||||
d = i, dist = dists[i];
|
d = i, dist = dists[i];
|
||||||
}
|
}
|
||||||
|
@ -911,12 +911,12 @@ namespace mapeditor {
|
|||||||
for(int d=0; d<S84; d++) {
|
for(int d=0; d<S84; d++) {
|
||||||
transmatrix d2 = drawtrans * rgpushxto0(ccenter) * rspintox(inverse(drawtrans * rgpushxto0(ccenter)) * coldcenter);
|
transmatrix d2 = drawtrans * rgpushxto0(ccenter) * rspintox(inverse(drawtrans * rgpushxto0(ccenter)) * coldcenter);
|
||||||
unsigned col = (d % (S84/drawcell->type) == 0) ? gridcolor : lightgrid;
|
unsigned col = (d % (S84/drawcell->type) == 0) ? gridcolor : lightgrid;
|
||||||
queueline(d2 * C0, d2 * spin(M_PI*d/S42)* xpush(1) * C0, col, 4 + vid.linequality);
|
queueline(d2 * C0, d2 * xspinpush0(M_PI*d/S42, 1), col, 4 + vid.linequality);
|
||||||
}
|
}
|
||||||
for(int u=2; u<=20; u++) {
|
for(int u=2; u<=20; u++) {
|
||||||
PRING(d) {
|
PRING(d) {
|
||||||
transmatrix d2 = drawtrans * rgpushxto0(ccenter) * rspintox(inverse(drawtrans * rgpushxto0(ccenter)) * coldcenter);
|
transmatrix d2 = drawtrans * rgpushxto0(ccenter) * rspintox(inverse(drawtrans * rgpushxto0(ccenter)) * coldcenter);
|
||||||
curvepoint(d2 * spin(M_PI*d/S42)* xpush(u/20.) * C0);
|
curvepoint(d2 * xspinpush0(M_PI*d/S42, u/20.));
|
||||||
}
|
}
|
||||||
queuecurve((u%5==0) ? gridcolor : lightgrid, 0, PPR_LINE);
|
queuecurve((u%5==0) ? gridcolor : lightgrid, 0, PPR_LINE);
|
||||||
}
|
}
|
||||||
@ -1501,7 +1501,7 @@ namespace mapeditor {
|
|||||||
transmatrix T = rgpushxto0(lstart);
|
transmatrix T = rgpushxto0(lstart);
|
||||||
texture::where = lstartcell;
|
texture::where = lstartcell;
|
||||||
for(int i=0; i<circp; i++)
|
for(int i=0; i<circp; i++)
|
||||||
texture::drawPixel(T * spin(2 * M_PI * i / circp) * xpush(rad) * C0, tcolor);
|
texture::drawPixel(T * xspinpush0(2 * M_PI * i / circp, rad), tcolor);
|
||||||
lstartcell = NULL;
|
lstartcell = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1632,7 +1632,7 @@ namespace mapeditor {
|
|||||||
if(radius > .1) circp *= 2;
|
if(radius > .1) circp *= 2;
|
||||||
|
|
||||||
for(int j=0; j<circp; j++)
|
for(int j=0; j<circp; j++)
|
||||||
pts.push_back(Ctr * tC0(spin(M_PI*j*2/circp) * xpush(radius)));
|
pts.push_back(Ctr * xspinpush0(M_PI*j*2/circp, radius));
|
||||||
for(int j=0; j<circp; j++) curvepoint(pts[j]);
|
for(int j=0; j<circp; j++) curvepoint(pts[j]);
|
||||||
curvepoint(pts[0]);
|
curvepoint(pts[0]);
|
||||||
queuecurve(texture::config.paint_color, 0, PPR_LINE);
|
queuecurve(texture::config.paint_color, 0, PPR_LINE);
|
||||||
|
@ -2069,7 +2069,7 @@ namespace linepatterns {
|
|||||||
if(pseudohept(c) && (p/4 == 10 || p/4 == 8))
|
if(pseudohept(c) && (p/4 == 10 || p/4 == 8))
|
||||||
for(int i=0; i<S7; i++) if(c->move(i) && emeraldval(c->move(i)) == p-4) {
|
for(int i=0; i<S7; i++) if(c->move(i) && emeraldval(c->move(i)) == p-4) {
|
||||||
queuelinef(tC0(V), V*tC0(heptmove[i]), col, 2 + vid.linequality);
|
queuelinef(tC0(V), V*tC0(heptmove[i]), col, 2 + vid.linequality);
|
||||||
queuelinef(tC0(V), V*tC0(spin(-i * ALPHA) * xpush(-hdist/2)), col, 2 + vid.linequality);
|
queuelinef(tC0(V), V*xspinpush0(-i * ALPHA, -hdist/2), col, 2 + vid.linequality);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
18
polygons.cpp
18
polygons.cpp
@ -1557,8 +1557,8 @@ void buildpolys() {
|
|||||||
|
|
||||||
bshape(shMovestar, PPR_MOVESTAR);
|
bshape(shMovestar, PPR_MOVESTAR);
|
||||||
for(int i=0; i<=8; i++) {
|
for(int i=0; i<=8; i++) {
|
||||||
hpcpush(spin(M_PI * i/4) * xpush(crossf) * spin(M_PI * i/4) * C0);
|
hpcpush(xspinpush0(M_PI * i/4, crossf));
|
||||||
if(i != 8) hpcpush(spin(M_PI * i/4 + M_PI/8) * xpush(crossf/4) * spin(M_PI * i/4 + M_PI/8) * C0);
|
if(i != 8) hpcpush(xspinpush0(M_PI * i/4 + M_PI/8, crossf/4));
|
||||||
}
|
}
|
||||||
|
|
||||||
// scales
|
// scales
|
||||||
@ -1603,10 +1603,10 @@ void buildpolys() {
|
|||||||
if(sphere&&S7==3) trihepta0 *= 1.3, trihepta1 *= 1.6;
|
if(sphere&&S7==3) trihepta0 *= 1.3, trihepta1 *= 1.6;
|
||||||
|
|
||||||
if(nonbitrunc) {
|
if(nonbitrunc) {
|
||||||
ld hedge = hdist(spin(M_PI/S7) * xpush(rhexf) * C0, spin(-M_PI/S7) * xpush(rhexf) * C0);
|
ld hedge = hdist(xspinpush0(M_PI/S7, rhexf), xspinpush0(-M_PI/S7, rhexf));
|
||||||
|
|
||||||
trihepta1 = hdist0(xpush(tessf) * spin(2*M_PI*2/S7) * xpush(tessf) * C0) / 2 * .98;
|
trihepta1 = hdist0(xpush(tessf) * xspinpush0(2*M_PI*2/S7, tessf)) / 2 * .98;
|
||||||
trihepta0 = hdist0(xpush(-tessf) * spin(M_PI/S7) * xpush(rhexf+hedge/2) * C0) * .98;
|
trihepta0 = hdist0(xpush(-tessf) * xspinpush0(M_PI/S7, rhexf+hedge/2)) * .98;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(binarytiling) hexvdist = rhexf = 1, tessf = 1, gp::scale = 1, scalef = 1, crossf *= .8;
|
if(binarytiling) hexvdist = rhexf = 1, tessf = 1, gp::scale = 1, scalef = 1, crossf *= .8;
|
||||||
@ -1749,7 +1749,7 @@ void buildpolys() {
|
|||||||
|
|
||||||
bshape(shCross, PPR_WALL);
|
bshape(shCross, PPR_WALL);
|
||||||
for(int i=0; i<=84; i+=7)
|
for(int i=0; i<=84; i+=7)
|
||||||
hpcpush(spin(2*M_PI*i/84) * xpush(zhexf * (i%3 ? 0.8 : 0.3)) * C0);
|
hpcpush(xspinpush0(2*M_PI*i/84, zhexf * (i%3 ? 0.8 : 0.3)));
|
||||||
|
|
||||||
// items
|
// items
|
||||||
|
|
||||||
@ -1973,16 +1973,16 @@ void buildpolys() {
|
|||||||
|
|
||||||
bshape(shRose, PPR_ITEM);
|
bshape(shRose, PPR_ITEM);
|
||||||
PRING(t)
|
PRING(t)
|
||||||
hpcpush(spin(M_PI * t / (S42+.0)) * xpush(xcrossf * (0.2 + .15 * sin(M_PI * t / (S42+.0) * 3))) * C0);
|
hpcpush(xspinpush0(M_PI * t / (S42+.0), xcrossf * (0.2 + .15 * sin(M_PI * t / (S42+.0) * 3))));
|
||||||
|
|
||||||
bshape(shThorns, PPR_THORNS);
|
bshape(shThorns, PPR_THORNS);
|
||||||
for(int t=0; t<=60; t++)
|
for(int t=0; t<=60; t++)
|
||||||
hpcpush(spin(M_PI * t / 30.0) * xpush(xcrossf * ((t&1) ? 0.3 : 0.6)) * C0);
|
hpcpush(xspinpush0(M_PI * t / 30.0, xcrossf * ((t&1) ? 0.3 : 0.6)));
|
||||||
|
|
||||||
for(int i=0; i<16; i++) {
|
for(int i=0; i<16; i++) {
|
||||||
bshape(shParticle[i], PPR_PARTICLE);
|
bshape(shParticle[i], PPR_PARTICLE);
|
||||||
for(int t=0; t<6; t++)
|
for(int t=0; t<6; t++)
|
||||||
hpcpush(spin(M_PI * t * 2 / 6 + M_PI * 2/6 * hrand(100) / 150.) * xpush((0.03 + hrand(100) * 0.0003) * goldbf) * C0);
|
hpcpush(xspinpush0(M_PI * t * 2 / 6 + M_PI * 2/6 * hrand(100) / 150., (0.03 + hrand(100) * 0.0003) * goldbf));
|
||||||
hpc.push_back(hpc[last->s]);
|
hpc.push_back(hpc[last->s]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -339,7 +339,7 @@ void bantar_frame() {
|
|||||||
transmatrix itView = inverse(tView);
|
transmatrix itView = inverse(tView);
|
||||||
transmatrix z = rspintox(itView*C0) * xpush(hdist0(itView*C0) * part) * spintox(itView*C0);
|
transmatrix z = rspintox(itView*C0) * xpush(hdist0(itView*C0) * part) * spintox(itView*C0);
|
||||||
transmatrix ful = rspintox(itView*C0) * xpush(hdist0(itView*C0) * tmax / tmax) * spintox(itView*C0); // rgpushxto0(itView*C0);
|
transmatrix ful = rspintox(itView*C0) * xpush(hdist0(itView*C0) * tmax / tmax) * spintox(itView*C0); // rgpushxto0(itView*C0);
|
||||||
hyperpoint C1 = xpush(1) * C0;
|
hyperpoint C1 = xpush0(1);
|
||||||
ld bof = alphaof(tView * ful * C1);
|
ld bof = alphaof(tView * ful * C1);
|
||||||
z = z * spin(bof * part);
|
z = z * spin(bof * part);
|
||||||
View = inverse(z);
|
View = inverse(z);
|
||||||
|
@ -811,8 +811,8 @@ namespace levelline {
|
|||||||
auto draw = [&] () {
|
auto draw = [&] () {
|
||||||
auto vmid = *v1;
|
auto vmid = *v1;
|
||||||
queueline(
|
queueline(
|
||||||
tC0(T * ddspin(c1,i) * xpush(d2 * (vmid-val1) / (val2-val1))),
|
(T * ddspin(c1,i) * xpush0(d2 * (vmid-val1) / (val2-val1))),
|
||||||
tC0(T * ddspin(c1,i-1) * xpush(d3 * (vmid-val1) / (val3-val1))),
|
(T * ddspin(c1,i-1) * xpush0(d3 * (vmid-val1) / (val3-val1))),
|
||||||
l.color, vid.linequality);
|
l.color, vid.linequality);
|
||||||
};
|
};
|
||||||
while(v1 < v2 && v1 < v3) {
|
while(v1 < v2 && v1 < v3) {
|
||||||
|
@ -22,7 +22,7 @@ ld strafex, strafey;
|
|||||||
hyperpoint spcoord(hyperpoint h) {
|
hyperpoint spcoord(hyperpoint h) {
|
||||||
ld phi = h[0], y = h[1], z = h[2], r = global_r;
|
ld phi = h[0], y = h[1], z = h[2], r = global_r;
|
||||||
dynamicval<eGeometry> gw(geometry, rug::gwhere == gElliptic ? gSphere : rug::gwhere);
|
dynamicval<eGeometry> gw(geometry, rug::gwhere == gElliptic ? gSphere : rug::gwhere);
|
||||||
hyperpoint inh = xpush(-acurvature*(y + r - frac(progress))/szoom) * spin(M_PI/2) * xpush(acurvature*z) * C0;
|
hyperpoint inh = xpush(-acurvature*(y + r - frac(progress))/szoom) * xspinpush0(M_PI/2, acurvature*z);
|
||||||
hyperpoint i = inh * (hdist0(inh) / hypot2(inh));
|
hyperpoint i = inh * (hdist0(inh) / hypot2(inh));
|
||||||
ld aphi = (r+phi + floor(progress))*M_PI/6;
|
ld aphi = (r+phi + floor(progress))*M_PI/6;
|
||||||
return hpxyz(i[1] * sin(aphi), i[1] * cos(aphi), i[0]);
|
return hpxyz(i[1] * sin(aphi), i[1] * cos(aphi), i[0]);
|
||||||
|
8
rug.cpp
8
rug.cpp
@ -239,7 +239,7 @@ rugpoint *addRugpoint(hyperpoint h, double dist) {
|
|||||||
ld r = acosh(modelscale);
|
ld r = acosh(modelscale);
|
||||||
// point on an equdistant going through C0 in distance d along the guiding line
|
// point on an equdistant going through C0 in distance d along the guiding line
|
||||||
// hpoint = hpxy(cosh(r) * sinh(r) * (cosh(d) - 1), sinh(d) * cosh(r));
|
// hpoint = hpxy(cosh(r) * sinh(r) * (cosh(d) - 1), sinh(d) * cosh(r));
|
||||||
hpoint = xpush(r) * ypush(d) * xpush(-r) * C0;
|
hpoint = xpush(r) * ypush(d) * xpush0(-r);
|
||||||
hpoint[0] = -hpoint[0];
|
hpoint[0] = -hpoint[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -683,8 +683,8 @@ bool force(rugpoint& m1, rugpoint& m2, double rd, bool is_anticusp=false, double
|
|||||||
throw rug_exception();
|
throw rug_exception();
|
||||||
}
|
}
|
||||||
|
|
||||||
f1 = iT1 * xpush(d1*forcev) * C0;
|
f1 = iT1 * xpush0(d1*forcev);
|
||||||
f2 = iT1 * xpush(t-d2*forcev) * C0;
|
f2 = iT1 * xpush0(t-d2*forcev);
|
||||||
|
|
||||||
m1.flat = n[f1];
|
m1.flat = n[f1];
|
||||||
m2.flat = n[f2];
|
m2.flat = n[f2];
|
||||||
@ -1242,7 +1242,7 @@ void prepareTexture() {
|
|||||||
transmatrix V = rgpushxto0(finger_center->h);
|
transmatrix V = rgpushxto0(finger_center->h);
|
||||||
queuechr(V, 0.5, 'X', 0xFFFFFFFF, 2);
|
queuechr(V, 0.5, 'X', 0xFFFFFFFF, 2);
|
||||||
for(int i=0; i<72; i++)
|
for(int i=0; i<72; i++)
|
||||||
queueline(tC0(V * spin(i*M_PI/32) * xpush(finger_range)), tC0(V * spin((i+1)*M_PI/32) * xpush(finger_range)), 0xFFFFFFFF, vid.linequality);
|
queueline(V * xspinpush0(i*M_PI/32, finger_range), V * xspinpush0((i+1)*M_PI/32, finger_range), 0xFFFFFFFF, vid.linequality);
|
||||||
}
|
}
|
||||||
drawqueue();
|
drawqueue();
|
||||||
vid = svid;
|
vid = svid;
|
||||||
|
@ -1319,7 +1319,7 @@ void roseCurrents(transmatrix& nat, monster *m, int delta) {
|
|||||||
|
|
||||||
hyperpoint keytarget(int i) {
|
hyperpoint keytarget(int i) {
|
||||||
double d = 2 + sin(curtime / 350.);
|
double d = 2 + sin(curtime / 350.);
|
||||||
return pc[i]->pat * xpush(d) * C0;
|
return pc[i]->pat * xpush0(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* int charidof(int pid) {
|
/* int charidof(int pid) {
|
||||||
@ -1333,11 +1333,11 @@ double getSwordSize() { return 0.7255; }
|
|||||||
double getHornsSize() { return 0.33; }
|
double getHornsSize() { return 0.33; }
|
||||||
|
|
||||||
hyperpoint swordpos(int id, bool rev, double frac) {
|
hyperpoint swordpos(int id, bool rev, double frac) {
|
||||||
return pc[id]->pat * spin(pc[id]->swordangle) * xpush((rev?-frac:frac) * getSwordSize()) * C0;
|
return pc[id]->pat * xspinpush0(pc[id]->swordangle, (rev?-frac:frac) * getSwordSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
hyperpoint hornpos(int id) {
|
hyperpoint hornpos(int id) {
|
||||||
return pc[id]->pat * tC0(xpush(getHornsSize()));
|
return pc[id]->pat * xpush0(getHornsSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
#define IGO 9
|
#define IGO 9
|
||||||
|
10
syntetic.cpp
10
syntetic.cpp
@ -219,13 +219,13 @@ void prepare() {
|
|||||||
ld crmin = 0, crmax = sphere ? M_PI : 10;
|
ld crmin = 0, crmax = sphere ? M_PI : 10;
|
||||||
for(int q=0; q<100; q++) {
|
for(int q=0; q<100; q++) {
|
||||||
circumradius[i] = (crmin + crmax) / 2;
|
circumradius[i] = (crmin + crmax) / 2;
|
||||||
hyperpoint p1 = xpush(circumradius[i]) * C0;
|
hyperpoint p1 = xpush0(circumradius[i]);
|
||||||
hyperpoint p2 = spin(2 * M_PI / faces[i]) * p1;
|
hyperpoint p2 = spin(2 * M_PI / faces[i]) * p1;
|
||||||
inradius[i] = hdist0(mid(p1, p2));
|
inradius[i] = hdist0(mid(p1, p2));
|
||||||
if(hdist(p1, p2) > edgelength) crmax = circumradius[i];
|
if(hdist(p1, p2) > edgelength) crmax = circumradius[i];
|
||||||
else crmin = circumradius[i];
|
else crmin = circumradius[i];
|
||||||
}
|
}
|
||||||
hyperpoint h = xpush(edgelength/2) * spin(M_PI/2) * xpush(inradius[i]) * C0;
|
hyperpoint h = xpush(edgelength/2) * xspinpush0(M_PI/2, inradius[i]);
|
||||||
alphas[i] = atan2(-h[1], h[0]);
|
alphas[i] = atan2(-h[1], h[0]);
|
||||||
alpha_total += alphas[i];
|
alpha_total += alphas[i];
|
||||||
}
|
}
|
||||||
@ -369,9 +369,9 @@ void create_adjacent(heptagon *h, int d) {
|
|||||||
for(int d2=0; d2<p.first->c7->type; d2++) {
|
for(int d2=0; d2<p.first->c7->type; d2++) {
|
||||||
auto& t2 = get_triangle(p.first, d2);
|
auto& t2 = get_triangle(p.first, d2);
|
||||||
transmatrix T1 = T * spin(M_PI + t2.first);
|
transmatrix T1 = T * spin(M_PI + t2.first);
|
||||||
SDEBUG( printf("compare: %s", display(T1 * xpush(1) * C0)); )
|
SDEBUG( printf("compare: %s", display(T1 * xpush0(1))); )
|
||||||
SDEBUG( printf(":: %s\n", display(p.second * xpush(1) * C0)); )
|
SDEBUG( printf(":: %s\n", display(p.second * xpush0(1))); )
|
||||||
if(intval(T1 * xpush(1) * C0, p.second * xpush(1) * C0) < 1e-6) {
|
if(intval(T1 * xpush0(1), p.second * xpush0(1)) < 1e-6) {
|
||||||
connectHeptagons(h, d, heptspin(p.first, d2));
|
connectHeptagons(h, d, heptspin(p.first, d2));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1328,7 +1328,7 @@ void filltriangle(const array<hyperpoint, 3>& v, const array<point, 3>& p, int c
|
|||||||
|
|
||||||
void splitseg(const transmatrix& A, const array<ld, 2>& angles, const array<hyperpoint, 2>& h, const array<point, 2>& p, int col, int lev) {
|
void splitseg(const transmatrix& A, const array<ld, 2>& angles, const array<hyperpoint, 2>& h, const array<point, 2>& p, int col, int lev) {
|
||||||
ld newangle = (angles[0] + angles[1]) / 2;
|
ld newangle = (angles[0] + angles[1]) / 2;
|
||||||
hyperpoint nh = A * spin(newangle) * xpush(penwidth) * C0;
|
hyperpoint nh = A * xspinpush0(newangle, penwidth);
|
||||||
auto np = ptc(nh);
|
auto np = ptc(nh);
|
||||||
|
|
||||||
filltriangle(make_array(h[0],h[1],nh), make_array(p[0],p[1],np), col, lev);
|
filltriangle(make_array(h[0],h[1],nh), make_array(p[0],p[1],np), col, lev);
|
||||||
@ -1345,7 +1345,7 @@ void fillcircle(hyperpoint h, int col) {
|
|||||||
|
|
||||||
ld step = M_PI * 2/3;
|
ld step = M_PI * 2/3;
|
||||||
|
|
||||||
array<hyperpoint, 3> mh = make_array(A * xpush(penwidth) * C0, A * spin(step) * xpush(penwidth) * C0, A * spin(-step) * xpush(penwidth) * C0);
|
array<hyperpoint, 3> mh = make_array(A * xpush0(penwidth), A * xspinpush0(step, penwidth), A * xspinpush0(-step, penwidth));
|
||||||
auto mp = ptc(mh);
|
auto mp = ptc(mh);
|
||||||
|
|
||||||
filltriangle(mh, mp, col, 0);
|
filltriangle(mh, mp, col, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user