Рикошеты
war_tundra — 11.11.2014 Наверное один из самых спорных моментов в игре, подпортивший немало стульев.Почему он собственно происходит? Если очень упрощенно - при отклонении от нормали появляется дополнительный момент, пропорциональный углу наклона, стремящийся развернуть снаряд. Как только этот момент станет больше, чем сила сцепления с поверхностью, произойдет рикошет. Если рикошет прошел по касательной без особых последствий - он считается неупругим, успел прихватить с собой кусок брони и деформировать лист- упругим.
Но это так, досужие рассуждения. Немного поискав нашел вот такую статью по численному моделированию процесса рикошета. Во введении приведены аналитические модели рикошета (к моему удивлению их оказалось всего две). Одна из них выглядит следующим образом: на вид все логично - рикошет зависит от скорости, плотностей снаряда и преграды, динамической прочности, геометрии снаряда. Причем в правой части соотношения все параметры для определенного снаряда постоянны кроме скорости, так что для лучшего понимания формулу можно упростить: здесь k - постоянная для определенного снаряда, умноженная на квадрат скорости. Выполнился критерий, при определенном или большем угле отклонения от нормали произошел рикошет. Все логично, но на то она и научная теория.
Теперь что творится в игре:
Только молодость, только рандом! Зачем критерии, когда есть генератор случайных чисел? Судя по лапласоподобному виду хоть распределение нормальное, уже хорошо.
Недостатков у такого подхода несколько: абсолютно не физичное поведение снаряда из-за кривого описания, присутствие генератора псевдослучайных чисел, которому никто не запрещает выдавать серию маловероятных событий и неравенство игроков. Или иными словами можно получить серию рикошетов практически по нормали (особенно доставит, если у Вы успеете сделать всего пару выстрелов), либо наоборот - пробитие снарядом, летевшим практически параллельно листу брони (тут подгорит у того, в кого попали). Из той же серии снаряд, летающий как резиновый мячик по боевому отделению. Неравенство игроков - вы в кого-то выстрелили вроде бы при 100% пробитии, рандом сказал "нет, рикошет", тот развернувшись пояснит, что рандом наше все.
Так вот, почему бы не ввести критерий вида:
и не завести правило не использовать генератор случайных чисел без необходимости, а уж тем более если он не нужен от слова совсем.
И в качестве иллюстрации: