Alexander K
Что-то этот момент мне не очень нравится:
float additionRPM = torq / Inertia - pow(1.0f - torq, 2) * BackTorque;
RPM += additionRPM * (1.0f - Clutch);То есть, пока Inertia - величина постоянная (колесо висит в воздухе), формула правильная, изменение инерции (инерция колеса+инерция автомобиля) повлияет и на вторую строчку. При пробуксовке тоже будут изменения.
Хотя я пока только раз прочитал, мог что-то упустить.
Mikle
Inertia здесь это инерция вращающихся элементов двигателя и только(помоему в статье это было указано).
Как видно из второй строчки, при отпущенном сцеплении (когда Cluth == 1.0f), скорость вращения коленвала здесь меняться не будет, она начинает зависеть от скорости вращения колёс, при этом крутящий момент начинает передаваться на колёса.
FrostFury
Приятно видеть хорошие отзывы)) спасибо.
Alexander K
Да, под "инерция колеса" я имел ввиду инерцию двигателя :).
При Cluth == 1.0f всё правильно, а при меньших значениях? Разве не будет зависимости от кучи других величин, как то сцепление с дорогой и т. п. ?
Впрочем, может я не до конца разобрался, жаль демки нет к статье.
Mikle
> При Cluth == 1.0f всё правильно, а при меньших значениях? Разве не будет
> зависимости от кучи других величин, как то сцепление с дорогой и т. п. ?
Всё будет, это описано в пункте "1.2 КПП".
Alexander K
Можешь пожалуйста написать код
К Часть 2: Шасси
Урок очень хороший! Но можно ли получить исходник Вашего кода на C++?
Подскажите пожалуйста, где брать такие константы как Inertia двигателя/колеса/коробки, BackTorque двигателя? А то что то от фонаря не получается подобрать, в каких рамках они вообще должны быть?
отличная статья для обучения! А можно ли получить исходник?
И что,никто не может помочь?
UPD: Инерцию вращающихся частей (например в двигателе больше всего влияет маховик, как я понял) можно посчитать по формуле инерция=масса*(радиус*радиус)/2. А как посчитать обратный крутящий момент?
Две полученые величины — продольная и поперечная сила не могут быть максимальными одновременно, тут необходимо действует правило «окружность трения», известное среди профессиональных гонщиков:
И ?
Окружность трения не гуглится, как это понять, и как использовать ?
PS\ Я не профф гонщик)
FDsagizi
Суммируешь вектора продольной и поперечной сил, если модуль полученной величины превышает силу трения - нормализуешь полученный вектор до величины силы трения и раскладываешь обратно, получаешь реально действующие продольную и поперечную силы с учётом трения.
Mikle
> Суммируешь вектора продольной и поперечной сил, если модуль полученной величины
> превышает силу трения - нормализуешь полученный вектор до величины силы трения
> и раскладываешь обратно, получаешь реально действующие продольную и поперечную
> силы с учётом трения.
Я правильно понял выше сказанное?
float friction_x = ...; float friction_z = ...; float all = ::fabs(friction_x + friction_z ); float maxValue = GetFrictionMax( ... ); if( all > maxValue ) { float alpha = maxValue / all; friction_x *= alpha ; friction_z *= alpha ; }
FDsagizi
Если это:
> float friction_x = ...; > float friction_z = ...;
получение сил при условии абсолютного сцепления с дорогой, то выглядит правильно.
думаю
float all = sqrt(friction_x*friction_x + friction_z*friction_z );
все же мы складываем перпендикулярные вектора сил, и должны получить вектор (friction_x, friction_z), а затем уже его длину
Тема в архиве.