1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2025-11-18 22:55:12 +00:00

conformal:: new models: formula and rotated hyperboles

This commit is contained in:
Zeno Rogue
2018-11-07 00:52:48 +01:00
parent 55fdd25a6c
commit 542e80081f
5 changed files with 80 additions and 32 deletions

View File

@@ -516,6 +516,43 @@ void applymodel(hyperpoint H, hyperpoint& ret) {
break;
}
case mdRotatedHyperboles: {
// ld zlev = <- not implemented
find_zlev(H); // + geom3::depth;
conformal::apply_orientation(H[0], H[1]);
ld y = asin_auto(H[1]);
ld x = asin_auto_clamp(H[0] / cos_auto(y));
// ld z = zlev == 1 ? 0 : geom3::factor_to_lev(zlev);
ld factor = geom3::lev_to_factor(y + geom3::depth);
ret[0] = sinh(x) * factor;
ret[1] = cosh(x) * factor;
ret[2] = 0;
ret[0] = atan(ret[0]);
ret[1] = atan(ret[1]);
break;
}
case mdFormula: {
dynamicval<eModel> m(pmodel, conformal::basic_model);
applymodel(H, ret);
exp_parser ep;
ep.extra_params["z"] = cld(ret[0], ret[1]);
ep.extra_params["cx"] = ret[0];
ep.extra_params["cy"] = ret[1];
ep.extra_params["cz"] = ret[2];
ep.s = conformal::formula;
cld res = ep.parse();
ret[0] = real(res);
ret[1] = imag(res);
ret[2] = 0;
break;
}
case mdGUARD: break;
}