1
0
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:
Zeno Rogue 2018-08-19 16:28:36 +02:00
parent 3ac47f53f5
commit e1c49a83fa
19 changed files with 68 additions and 74 deletions

View File

@ -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]);
} }

View File

@ -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);

View File

@ -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,

View File

@ -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);

View File

@ -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)
); );
} }

View File

@ -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
} }

View File

@ -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);
} }
} }

View File

@ -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]);

View File

@ -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];
} }

View File

@ -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);

View File

@ -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;

View File

@ -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]);
} }

View File

@ -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);

View File

@ -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) {

View File

@ -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]);

View File

@ -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;

View File

@ -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

View File

@ -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;
} }

View File

@ -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);