circularizeOrbits2B = (nodes, G) => {
G = G || 1;
let n1 = nodes[0];
let n2 = nodes[1];
const calcCom = (p1, p2) => {
let Rx = p2.x - p1.x;
let m1 = p1.m;
let m2 = p2.m;
let r1x = -1*(m2*Rx) /(m1 + m2);
let r2x = (m1*Rx) /(m1 + m2);
let Ry = p2.y - p1.y;
let r1y = -1*(m2*Ry) /(m1 + m2);
let r2y = (m1*Ry) /(m1 + m2);
return {r1: {x: r1x, y: r1y}, r2: {x: r2x, y: r2y}};
}
const com = calcCom(nodes[0], nodes[1]);
const R = {
x: com.r2.x - com.r1.x,
y: com.r2.y - com.r1.y,
}
let calcV = (m, r, R) => {
return {
vy: Math.sqrt((G*m*Math.abs(r.x))/(R.x*R.x || 1)),
vx: Math.sqrt((G*m*Math.abs(r.y))/(R.y*R.y || 1))
}
}
let v1 = calcV(n2.m, com.r1, R);
let v2 = calcV(n1.m, com.r2, R);
return [
{...n1, x: com.r1.x, y: com.r1.y, vx: v1.vx, vy: -v1.vy},
{...n2, x: com.r2.x, y: com.r2.y, vx: v2.vx, vy: v2.vy},
]
}