Гравитационная сила, действующая на данное тело, представлена в виде вектора и вызывает ускорение с компонентами (ax
и ay
), которые рассчитываются (исходя из того, что у вас уже есть) следующим образом:
squared_distance = square(x) + square(y)
distance = sqrt(squared_distance)
accel = other.mass / squared_distance
ax = accel * x / distance
ay = accel * y / distance
Обратите внимание, что angle
(направление силы / ускорения) не требуется.
Каждое тело должно иметь соответствующую скорость (вместо speed
), которая должна быть двухкомпонентным вектором (vx
и vy
). Он обновляется следующим образом (где dt
- интервал времени между обновлениями):
this.vx += ax * dt
this.vy += ay * dt
Как только скорость данного тела была обновлена, ее можно затем изменить (обновив ее x
, y
координаты) следующим образом:
this.x += this.vx * dt
this.y += this.vy * dt
Вы можете рассчитать скорость и направление, если они вам нужны, но они здесь не нужны.