2012-03-28 2 views
2

Почти каждая игра имеет тенденцию использовать некоторые из игрового цикла. Gafferongames имеет большую статью о том, как сделать хорошо разработанный цикл игры: http://gafferongames.com/game-physics/fix-your-timestep/Численная интеграция, Runge-Kutta, RK4 в игровом дизайне

В своем коде, он использует integrate(state, t, deltaTime);, где я считаю state содержит положение, скорость и ускорение объекта. Он использует RK4 для интеграции с t на t+deltaTime.

Мой вопрос, почему использовать численный метод интегрирования как RK4, когда вы можете использовать кинематические уравнения (here), чтобы найти точное значение?

Эти уравнения работают, когда ускорение является постоянным. Кажется редким, что у вас будет изменение ускорения в пределах a timestep. Кажется, что RK4 - это более низкая производительность, более низкая точность и более сложное решение.

Редактировать: Я думаю, вы могли бы добавить значение «рывка» к объектам и по-прежнему находить точные выражения для ускорения, скорости и перемещения, если вы действительно этого хотели.

Редактировать 2: Ну, я не читал его статью «Основы интеграции» слишком тщательно. Я думаю, он моделирует демпфер и пружину, которые вызывают неустойчивое ускорение в течение времени.

ответ

6

Как только вы добавляете то, что хотят многие разработчики игр, например (зависящие от скорости) перетаскивания, зависящие от положения силы и т. Д., Уравнения уже не разрешаются точно.

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

Примечание: Если вы обрабатываете силы как постоянные за промежуток времени, когда они не являются постоянными, то вы фактически используете форму численного интегрирования. И это тоже неточная форма интеграции. Так почему бы не использовать проверенный и проверенный численный метод? RK4 является одним из многих таких методов.

2

Аппроксимирующее ускорение (производные, действительно) как постоянное в течение временного шага - это то, как работают методы численной интеграции. Когда производные не являются постоянными, вам необходимо рассмотреть, какую ошибку вы вводите, рассматривая их как постоянные.

Представьте себе разрыв временного диапазона T до N равных ступеней ширины h=T/N. Теперь интегрируем динамические уравнения поэтапно. С RK4 местная ошибка за шаг составляет O(h^5), давая глобальную ошибку O(h^4).

Используя кинематические уравнения, как вы предлагаете, мы можем оценить ошибку, рассмотрев расширение Тейлора положения, сохраняя условия во втором порядке. Позиция будет иметь ошибку O(h^3), представленную на каждом шаге, соответствующую тому, где вы усекаете расширение. Это дает локальную ошибку O(h^3) и глобальную ошибку O(h^2).

Исходя из асимптотической ошибки, ошибка от RK4 идет к нулю намного быстрее, чем кинематические уравнения. Это более точно. RK4 получает очень хорошую точность, полученную для количества оценок функций, которые необходимо выполнить.

Смежные вопросы