@N1ceK1d

Как ограничить скорость разгона?

Пытаюсь сделать гоночную игру в стиле nfs, и встал вопрос как сделать так, чтобы если рано повысить передачу, то разгон автомобиля замедляется, а если повысить передачу во время, то скорость разгона сохраняется
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Mercury13
Программист на «си с крестами» и не только
Итак, тут у нас задача: каким образом, НАИМЕНЬШЕЙ КРОВЬЮ (игра совершенно условная, верно?) сделать поведение машины в зависимости от оборотов. Опустим сложные материи вроде приёмистости, турбины, торможения двигателем, спойлеров, дифференциала, увода шин и прочего. Считаем, что обороты мотора измеряем в об/мин, остальное (скорости, расстояния…) — в единицах СИ.

1. Нам нужны передаточные числа коробки в единицах «обороты·c/м·мин». Имея физическую машину в гараже и инструкцию к ней, действуем так: замеряем действующий радиус колеса с учётом смятой шины, находим передаточные числа передач в коробке и главной передачи, и

об·/метр = (передаточное_число_коробки·передаточное_число_главной_передачи)/(120π·радиус_колеса).

Ну или просто едем на стабильной скорости, замеряем скорость GPS’ом или километровыми знаками (важно! — спидометр всегда врёт), и заодно видим обороты мотора.

Если физической нет — находим похожую, узнаём передаточные числа, узнаём, на какой передаче достигается максимальная скорость (часто в народных машинах, не способных ездить за 200, высшая является овердрайвом, служит для экономии топлива и моторесурса, и в экстриме не используется), находим соответствующие обороты мотора, и обороты на скорость — получаем данное число для самой скоростной передачи. Для остальных пропорционально.

2. Теперь придумываем сопротивление движению в виде квадратного трёхчлена: Fсопр=av²+bv. Цифры a и b находим из двух условий: а) на максимальной скорости Fсопр=Pmax/v; б) линейная часть равна квадратичной где-то около 30 км/ч.

3. Находим характеристику двигателя: МОЩНОСТЬ от оборотов. Загоняем её в игру в виде ломаной или сплайна.

4. Прикидываем мощность мотора P в зависимости от положения газа, оборотов и этой кривой.

5. Ускорение машины: a = (P/v−Fсопр(v))/m, с какой-нибудь аппроксимацией, когда скорость меньше минимальной стабильной (5…10 км/ч в зависимости от машины).

6. Из скорости через наши «круго-линейные» передаточные числа определяем новые обороты двигателя и ударился ли он в отсечку. Если ударился, ограничиваем скорость.

7. Если машина вдруг прыгает (хоть одно ведущее колесо в воздухе) — просто считай, что она на нейтрали.

8. Во время переключения передач ручная машина должна быть на нейтрали, а поскольку игра типа NFS — перехватывай на это время у игрока управление оборотами, чтобы переключение было красивым и без рывков. На автоматической и роботе с двумя сцеплениями какая-то доля мощности приходит на колёса.

9. На малых скоростях есть ещё один ограничивающий фактор — пробуксовка шин. Если игра условная, то просто коряво рассчитай трение шин и не допускай такого разгона, что шины буксуют.
Ответ написан
Комментировать
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Пишите физику

Что там нужно?

Мощность
Крутящий момент
передаточное число
Лобовое сопротивление
Насколько газует

В принципе достаточно по 10 точек отсчета
то есть для 6 ступки получится 60 точек отсчета или 240 если учитывать непоследавательные передачи
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы