function xy2tp(x, y, r1, r2, x0, y0) {
const {sqrt, max, atan2, acos, PI} = Math;
x -= x0;
y -= y0;
if(x == 0 && y == 0) return (r1 == r2) ? [0., PI] : [NaN, NaN];
const r12 = r1 + r2, r1sq = r1 * r1, r2sq = r2 * r2;
const rsq = x * x + y * y, r = sqrt(rsq);
const phi = atan2(y, x);
const s = (rsq - r2sq + r1sq) / (2 * r);
const beta = acos(s / r1);
const T = phi - beta;
const P = acos((rsq - r1sq - r2sq) / (2 * r1 * r2));
return [T, P];
}