В конце этих замечательных слайдов автор сравнивает все представленные интеграторы. Так или иначе, все они терпят неудачу за исключением Improved Эйлера интеграции и Рунге - Кутта 4 интеграции , которые оба проходят все испытания.
Полагаю, мне следует упомянуть, что я работаю над 2D-игрой, которая не очень интенсивна по физике. Мне просто любопытно, где не будет улучшенной интеграции Эйлера, и вместо этого придется использовать RK4.
Моя игра состоит в основном из простой гравитации (прыжки и падения), движения по осям X и Y и столкновения ограничивающего прямоугольника. Стоит ли внедрять RK4 или будет достаточно Improved Euler? Я вижу много дискуссий, где пользователи Euler Integration наказываются, но из того, что я вижу, Improved Euler является эквивалентом в простых вопросах 2D. Я думаю, что это также будет быстрее.
источник
Ответы:
Я лично предпочитаю Velocity Verlet для большинства симуляций. По моему опыту с этим методом, он вполне подходит для довольно жестких уравнений. Кажется, что этот «улучшенный метод Эйлера» очень похож на метод Velocity Verlet и основан на классе методов интеграции, известных как предиктор-корректор . В наши дни вы можете многое прочитать об этих методах, начиная с Дэвида Бараффа «Большие шаги в моделировании одежды», где сила неявных методов действительно сияет. Их падение в том, что вы:
Так что, если вы не математический гуру, вы можете застрять в пальцах. Просто поэкспериментируйте с тем методом, который вам нужен, и выберите тот, который вам подходит. Простое не всегда лучше, но для интерактивных кадровых кадров я знаю только одно слово: компромисс.
Некоторые дополнительные ресурсы, которые вы можете посмотреть:
Якобсен - своего рода гений, который придумал такую простую идею для претенциозной задачи (его специальность - Криптография, если не ошибаюсь, но ему удалось доказать математическую эквивалентность его метода классу итерационного алгоритма Гаусса-Зейделя, который сходится ). Для простоты, сначала сделайте это, прежде чем углубляться в неявные методы.
ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ : Недавно я получил статью по этому вопросу об использовании явных интеграторов для моделирования мягких или полужестких тел и об их влиянии на производительность и качество. Этот документ должен служить руководством для выбора определенного интегратора, в зависимости от сценария.
источник
В: Зачем использовать продвинутую Рунге Кутту?
A: Потому что это очень точно.
Q: почему нет?
A: Поскольку вы делаете игру, и очень точный физический движок не имеет значения, он просто должен быть достаточно хорош, чтобы обмануть игрока.
Кстати, если вы столкнулись с сильным демпфированием при столкновении, как это делает большинство платформеров, простой Эйлер - это нормально.
Я настоятельно рекомендую вам, в отличие от кода в презентации, использовать физику с фиксированными шагами, которая избавляет вас от некоторых потенциальных сбоев и позволяет очень просто решить проблему получения или потери энергии шара. Просто перейдите на середину между явной и неявной интеграцией:
В презентации не показано, как обрабатывать столкновения, чтобы объекты не выходили за пределы границ. Простое решение этой проблемы - использовать высокую частоту обновления. Более сложное, но потенциально более эффективное решение - переместить объекты назад во время столкновения, точная реализация зависит от желаемого поведения физики.
источник
В презентации есть ошибка. Метод, называемый докладчиком «Улучшенный Эйлер», на самом деле является методом Velocity Verlet!
Смотрите здесь для более авторитетного источника: http://www.physics.udel.edu/~bnikolic/teaching/phys660/numeric_ode/node5.html
Также те же уравнения есть в Википедии .
Общее немедленное улучшение по сравнению с методом Эйлера - это метод Midpoint, который, вероятно, имел в виду докладчик, но в итоге принял Velocity Verlet как улучшенный Эйлер. Единственное различие между методом Midpoint и Velocity Verlet состоит в том, что скорость является средним значением последнего и следующего ускорения, а не просто зависит от последнего ускорения.
источник