Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Статьи / Физика автомобиля для игр.

Физика автомобиля для игр.

Автор: Marco Monster

Введение
Волшебные Константы
Движущая сила
Ускорение ведущих колес
Степень скольжения и сила тяги
Движение по кривой
Поворот на больших скоростях
Эпилог

Введение

Эта статья рассказывает о поведении автомобилей в играх, а именно о физике автомобиля.

Одним из ключевых пунктов в упрощении физики транспортного средства является раздельная обработка продольной и боковой силы. Продольная сила работает в направлении корпуса автомобиля (или же в противоположном направлении). Это сила тяги, тормозящая сила, сила трения и сила сопротивления перемещению (= сопротивление воздуха). Вместе эти силы управляют ускорением или замедлением автомобиля, следовательно, и скоростью автомобиля. Боковые силы позволяют автомобилю поворачиваться. Эти силы вызваны поперечным трением на колесах. Мы также рассмотрим угловой момент скорости автомобиля и момент вращения, вызванные боковыми силами.

Примечание и соглашения

Векторы выделены полужирным текстом, мы будем использовать 2d векторы. Так что примечание a = -b означало бы следующее:

a.x = -b.x 

a.y = -b.y

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

Все физические величины я буду измерять в единицах СИ (метры, килограммы, Ньютоны и т.д.).

Физика движения по прямой

Сначала рассмотрим автомобиль, двигающийся по прямой линии. Какие силы задействованы здесь? Прежде всего, это сила тяги, то есть сила, которая передается двигателем через задние колеса. Двигатель вращает колеса вперед (на самом деле он передает момент вращения на колеса), колеса "толкают назад" поверхность дороги, в результате поверхность дороги выталкивает колеса в противоположном направлении, то есть вперед. Сейчас мы просто положим, что сила тяги эквивалентна по величине переменной Engineforce, которая управляется непосредственно пользователем.
   
Ftraction = u * Engineforce,
где u - единичный вектор в направлении движения автомобиля.

Если бы это была единственная сила, то автомобиль просто бы ускорился до бесконечной скорости. Ясно, что в реальной жизни дело обстоит совсем не так. Введем силы сопротивления. Первая и обычно наиболее важная - сила воздушного сопротивления, другими словами аэродинамическое сопротивление. Эта сила важна, поскольку она пропорциональна квадрату скорости. Когда мы двигаемся быстро (а какая игра не вовлекает в высокие скорости?) эта сила становится наиболее важной силой сопротивления.

Fdrag = - Cdrag * v * |v|
где Cdrag константа, v - вектор скорости и |v| - модуль вектора v, являющийся длиной вектора v.

Длина вектора скорости обычно известна как скорость. Обратите внимание на различие типа данных: скорость - скаляр, скорость - вектор. Используйте приблизительно следующий код:

speed = sqrt(v.x*v.x + v.y*v.y);

fdrag.x = - Cdrag * v.x * speed;
fdrag.y = - Cdrag * v.y * speed;

Так же, еще есть сопротивление вращения. Это вызвано трением между резиной и дорожной поверхностью, так как колеса прокручиваются, трением на осях и т.д. Мы обозначим это силой, которая пропорциональна скорости, с использованием другой константы.

Frr = - Crr * v
где Crr константа, и v - вектор скорости.

При низких скоростях трение (Frr) является основной силой сопротивления, при высоких скоростях Fdrag превышает по значению Frr. Приблизительно при 100 км/час (60 миль в час, 30 м/с) они равны ([Zuvich]). Это означает, что Crr должен быть равен приблизительно 30-ти Cdrag.

Общая продольная сила - это векторная сумма этих трех сил.

Flong = Ftraction + F drag + Frr

Обратите внимание, что если вы двигаетесь по прямой линии, то силы аэродинамического сопротивления и трения будут направлены противоположно силе тяги (Ftraction). То есть вы вычитаете силу аэродинамического сопротивления из силы сцепления. И когда автомобиль движется с постоянной скоростью, то силы находятся в равновесии, и Flong равен нулю.

Ускорение (a) автомобиля (в м/с2) определено равнодействующей силой автомобиля (в Ньютонах) и массой автомобиля М (в килограммах) по второму закону Ньютона:
 
a = F / M

Скорость автомобиля (в метрах в секунду) определяется, как интеграл ускорения через какое-то время (dt). Это звучит слишком сложным, но следующее уравнение поможет нам. Воспользуемся методом Эйлера для численного интегрирования.

v = v + dt * a,
где dt - промежуток времени между предыдущим и текущим вызовами просчета физики.

Позиция автомобиля свою очередь определяется, как интеграл скорости по dt.

p = p + dt * v

Используя эти три силы, мы уже довольно точно можем моделировать ускорение автомобиля. Вместе они также определяют максимальную скорость автомобиля для данной мощности двигателя. То есть, нет необходимости устанавливать максимальную скорость где-нибудь в коде, она автоматически вычисляется из уравнений. Дело в том, что уравнения формируют своего рода цикл отрицательной обратной связи. Если сила тяги (Ftraction) превышает все другие силы, то автомобиль ускоряется. Увеличивающаяся скорость,  также заставляет увеличиваться силы сопротивления. Равнодействующая сила уменьшается, а следовательно уменьшается и ускорение. В некоторой точке силы сопротивления и сила тяги компенсируют друг друга,  и автомобиль достигает своей максимальной скорости для данной мощности двигателя.

Изображение

На этом графике Ось X обозначает скорость автомобиля в метрах в секунду и значения силы, которая отмечена по Оси Y. Значение силы тяги (темно синий) установлено произвольно, оно не зависит от скорости автомобиля. Трение (пурпурная линия) - линейная функция скорости, и сопротивление (желтая кривая) - квадратичная функция скорости. При низких скоростях трение превышает аэродинамическое сопротивление. При 30 м/с эти две функции пересекаются. При более высоких скоростях аэродинамическое сопротивление является наибольшей силой сопротивления. Сумма из двух сил сопротивления показана светло-синей кривой. При 37 м/с эта кривая пересекает горизонтальную линию силы тяги. Это - максимальная скорость для данной мощности автомобиля (37 м/с = 133 км/час = 83 мили в час).

Страницы: 1 2 37 8 Следующая »

23 мая 2003

#autosim, #автомобиль


Обновление: 4 июня 2010

2001—2018 © GameDev.ru — Разработка игр