Pull to refresh

Comments 15

Новые рубежи в Физике

Наверное, было бы не лишним упомянуть, что оригинальная статья была написана в 1996 году.


Алгоритм Эйлера для численного интегрирования просто следует векторному полю в соответствие с начальной позицией через нахождение производной уравнения (-v/m для нашего примера с силой трения) для определения наклона в текущей точке, и затем просто продвигается шаг за шагом во времени, в зависимости от неизменяемой величины h, по линии наклона

Для физических движков еще часто используют интегрирование Верле. Если в методе Эйлера хранится текущее положение и скорость, то тут хранится предыдущее положение и текущее. Это позволяет накладывать на положение точки дополнительные ограничения (сделать жесткие перекладины между объектами, отталкивание объекта от стены), которые будут обрабатываться более устойчиво, чем в методе Эйлера. Если нужно использовать скорость, то используют velocity Verlet.


Очевидно, что метод Эйлера дает небольшую погрешность с каждым временным шагом, т. к. реальный вектор скорости (а поэтому и кривая решения) изгибается с отклонением в каждой точек, и алгоритм Эйлера немного отступает от угла наклона. Но если временной шаг, h – довольно малые величины, погрешность стремится к нулю.

Метод Эйлера довольно быстро накапливает ошибку, но для игровых движков это не критично. Если нужна точность, то стоит обратить внимание на Метод Рунге — Кутты, который дает ошибку на несколько порядков меньше.

небольшой комментарий. Методы Эйлера хуже в плане точности чем Рунге-Кутты, но последний тоже очень сильно может ухудшить точность, если принять слишком маленький шаг времени. И иногда — в лучшем случае получить то же самое со значительно бОльшим временем расчета.

Собственно, любые методы интегрирования будут ухудшать точность при слишком маленьком шаге по времени, когда расчеты ведутся с плавающей точкой. Поэтому у любого численного метода есть предельная точность при некоторой длине шага по времени. Если шаг больше — точность ниже из-за ошибки метода (ошибка урезания ряда Тейлора — truncation error), если шаг меньше — точность тоже ниже из-за ошибок округления (roundoff error).


Один из недостатков метода Эйлера — как раз то, что у с измельчением шага довольно медленно растет точность, а потом она за счет ошибок округления начинает опять падать, а предельная точность оказывается ниже, чем, например, у метода Эйлера с пересчётом при вдвое большем шаге по времени.


Хотя я понимаю, что специфика геймдева такова, что шаг по времени диктуется не оптимальной точностью, а частотой отрисовки кадров, и аргументация "мы интегрируем с шагом 1/4 с, потому что с шагом 1/60 с точность ниже" игроками, особенно сетевыми, вряд ли будет принята с одобрением.


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


Но, на самом деле, этой проблемы не существует, если считать в двойной точности — там ошибки округления начинают накапливаться при шагах на 7 порядков короче, чем при одинарной точности.

Здравствуйте! Да, статья написана в мохнатых 90-х, но до сих пор чрезвычайно актуальна. Я рассматривал такие физические библиотеки, как то: JBox2D (в составе LibGDX), Liquid Fun, — у них прекрасный функционал, неисчерпаемые возможности, но мне кажется полезным для программиста разработать свой физический движок (для полного понимания уже созданных ранее).

В оригинальной статье авторства Chris Hecker выбор метода Эйлера объясняется его простотой для понимания и реализации.

Во время своих разработок я воспользуюсь методами, которые Вы предложили.

В мобильной версии уравнения превратились в тыкву :( Жаль, начало было интересным.


Пробовал хром и сафари

Добрый день! Добавлял формулы в формате изображений, а через инструменты habr.com. Возможно, в следующей статье попробую этот способ во избежание подобных недоразумений.
В МОБИЛЬНОЙ версии iOS в Firefox формулы заработали.
Автор, если вы переводите 'Physics, The Next Frontier' как 'Новые рубежи в физике', у меня для вас плохие новости. Не говоря уже о том, что сейчас описываемый в оригинальной статье рубеж совсем уже не новость.
Здравствуйте! Статья из 90-х, тогда игры были немного другими. Конечно, сегодня есть Unity, есть физические библиотеки, современный функционал поражает воображение! Я читал тематические комментарии на «Stackoverflow», статья часто упоминается, но ни разу не упомянут перевод. Вы можете успешно работать с уже реализованными физическими движками, но есть те, кто хотят создать свой, — для них и был сделан этот перевод.
дравствуйте! Статья из 90-х, тогда игры были немного другими. Конечно, сегодня есть Unity, есть физические библиотеки, современный функционал поражает воображение!

Избавьте меня от вашей ваты, пожалуйста.
Вы можете успешно работать с уже реализованными физическими движками, но есть те, кто хотят создать свой, — для них и был сделан этот перевод.

Эта статья для тех, кто хотел сделать свой игровой движок 20 лет назад. К данному времени для интересующихся этой темой написано множество содержательных книг. Оригинальная статья сегодня, максимум, может претендовать на 'введение в математическое моделирование'. То, что изучают на школьном уроке информатики.
Вы могли бы порекомендовать данную литературу в комментариях под статьей, это будет очень полезно и нужно всем читателям. Добавьте немного конструктива в ваши комментарии.
В действительности все эти величины очень тесно связаны (как вы вероятно знаете): скорость – это показатель изменения координаты тела со временем, а ускорение – это показатель изменения скорости. Первичный инструмент для изучения изменений этих величин во времени – это вычисления.

Вычисления… Долго думал… Возможно в оригинале было Calculus? Тогда это не ВЫчисления, а ИСчисление. И сразу все становится на свои места. Речь про дифференциальное и интегральное исчисление.
Only those users with full accounts are able to leave comments. Log in, please.