particle_field = {
const out = [];
for (const [index, initial_position] of initial_positions.entries()) {
const initial = Particle({
index,
time: 0,
position: initial_position,
velocity: 0,
mass: 1
});
let previous = initial;
for (const time of time_steps) {
const dt = time - previous.time;
const distance_to_planet = Math.abs(previous.position - planet.position);
if (distance_to_planet < planet_radius) continue;
const acceleration = gravity(previous, planet);
const velocity_delta = acceleration * dt;
let velocity = previous.velocity + velocity_delta;
const speed = Math.abs(velocity);
const position_delta = velocity * dt;
const position = previous.position + position_delta;
const next = Particle({
index,
time,
position,
velocity,
speed,
mass: initial.mass,
data: {
distance_to_planet
}
});
previous = next;
out.push(next);
}
}
return out;
}