Published
Edited
Oct 12, 2022
2 stars
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
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 a = sqrt(r1sq - s * s);
//const beta = atan2(a, s);
const T = phi - beta;
const P = acos((rsq - r1sq - r2sq) / (2 * r1 * r2));
return [T, P];
}
Insert cell
Insert cell
function tp2xy(T, P, r1, r2, x0, y0) {
const {cos, sin} = Math;
const x = x0 + r1 * cos(T) + r2 * cos(T + P);
const y = y0 + r1 * sin(T) + r2 * sin(T + P);
return [x, y];
}
Insert cell
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more