Как влияет 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=adt. Offset = (u+aScale)dt = 110
А если через уравнение движения то будет vdt+a*dt^2/2=60 Разный результат.
Вопрос как найти пройденное расстояние. Разные методы дают разный ответ.
Ответы (1 шт):
С ускорением и скоростью ничего не происходит.
Вы рассчитываете "кадры" симуляции физического процесса через каждые dT секунд. А показываете их через каждые F секунд
При фиксированном F: если dT маленькое, движение будет казаться плавным и медленным, а если большое - быстрым и скачками.
Если у вас движение равноускоренное и условия не меняются, то нужно использовать приведённую вами формулу.
Если имеются другие объекты и внешние силы, действующие на тело, то сумма сил изменяется, меняется и ускорение, движение уже не является равноускоренным. Если нет возможности решить диффур и получить уравнение движения в этих условиях, то используют пересчёт ускорения и скорости на каждом шаге - и вот здесь, чем шаг по времени меньше - тем точнее симуляция.
A = Sum(F[i]) / m
V += A * dT
X += V * dT