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

    @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. На малых скоростях есть ещё один ограничивающий фактор — пробуксовка шин. Если игра условная, то просто коряво рассчитай трение шин и не допускай такого разгона, что шины буксуют.
    Ответ написан
    Комментировать