Как влияет dt в симуляции системе, откуда неточность?

Программирую движение частиц. для задачи n тел. Не могу понять как ускорять время. Типа как понимать шаг симуляции каждые 10000 секунд. Что при этом происходит с ускорением и скоростью. Есть уравнение движения dx= Udt+0.5adt^2; тут есть деление на 2, но в примерах реализаций никто не делит на 2, не могу понять, является ли шаг итерации временем или это множитель?
Допустим у меня есть, на итерации, я нахожу A- вектор ускорения. V- вектор скорости. dt- шаг симуляции. Допустим а=1, v=1, dt=10. Какое будет изменение расстояния. К примеру если считать по наитию, то есть в цикле, не задумываясь.(Как видел в исходниках проектов, то там типа такого https://github.com/HermannBjorgvin/Gravity-Simulator/blob/master/js/gravity/modules/spacetime.js 203 строка). Типа рассуждаем так, раз надо симулировать с шагом 100сек, то полученное ускорение надо умножить на шаг. прибавить к скорости, А затем снова умножить. ТО будет aScale=a
dt. Offset = (u+aScale)dt = 110 А если через уравнение движения то будет vdt+a*dt^2/2=60 Разный результат. Вопрос как найти пройденное расстояние. Разные методы дают разный ответ.


Ответы (1 шт):

Автор решения: MBo

С ускорением и скоростью ничего не происходит.

Вы рассчитываете "кадры" симуляции физического процесса через каждые dT секунд. А показываете их через каждые F секунд

При фиксированном F: если dT маленькое, движение будет казаться плавным и медленным, а если большое - быстрым и скачками.

Если у вас движение равноускоренное и условия не меняются, то нужно использовать приведённую вами формулу.

Если имеются другие объекты и внешние силы, действующие на тело, то сумма сил изменяется, меняется и ускорение, движение уже не является равноускоренным. Если нет возможности решить диффур и получить уравнение движения в этих условиях, то используют пересчёт ускорения и скорости на каждом шаге - и вот здесь, чем шаг по времени меньше - тем точнее симуляция.

A = Sum(F[i]) / m
V += A * dT
X += V * dT
→ Ссылка