updatePlanets = function (planets) {
let dv, p1_d, p2_d;
let velUpdate = planets.map((p1, i1) => {
dv = planets.reduce((acc, p2, i2) =>
acc.map((v_d, d) => {
p1_d = p1.position[d];
p2_d = p2.position[d];
if (p1_d < p2_d) { return v_d + 1 }
if (p1_d > p2_d) { return v_d - 1 }
return v_d
})
, [0, 0, 0]);
return p1.velocity.map((v_d, d) => v_d + dv[d])
});
let pos, vel, pE, kE;
return planets.map( (p, i) => {
vel = velUpdate[i];
pos = p.position.map( (p_d, d) => p_d + vel[d] );
pE = pos.map(Math.abs).reduce((a,v) => a+v);
kE = vel.map(Math.abs).reduce((a,v) => a+v);
return {position: pos, velocity: vel, pE: pE, kE: kE, tE: pE*kE};
})
}