function sinucyliFactory(t, phi0, switchAB = true) {
const { sin, cos, asin, sqrt } = Math;
const k = sqrt(t);
const cosPhi0 = cos(phi0 * Math.PI / 180),
a = k + (1 - k) * cosPhi0,
b = k + (1 - k) / cosPhi0,
A = sqrt(a / b),
B = sqrt(b / a);
return (lambda, phi) => {
let sinPhi = sin(phi),
cosPhi = cos(phi);
return switchAB
? [
lambda * sqrt(1 - k * k * sinPhi * sinPhi) * A,
asin(k * sinPhi) / k * B
]
: [
lambda * cosPhi * cosPhi0 / cos(k * phi) * A,
sin(k * phi) / cosPhi0 / k * B
]
};
}