function warp(point) {
const v1 = cartesian(point),
v0 = cartesian([long1, lat1]),
N = normalize(crossprod(v1, v0)),
w0 = crossprod(N, v0),
d = dotprod(v0, v1),
cs =
(r1 * r1 * (1 + d) - r2 * r2 * (1 - d)) /
(r1 * r1 * (1 + d) + r2 * r2 * (1 - d)),
sn = sqrt(1 - cs * cs),
z0 = matadd(v0, w0, cs, sn),
a0 = angle(z0, [0, 0, 1]),
a1 = signum(z0[1]) * angle([z0[0], z0[1], 0], [1, 0, 0]);
return [a1 * degrees, 90 - a0 * degrees];
}