Рикошеты

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


Теперь что творится в игре:

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

и не завести правило не использовать генератор случайных чисел без необходимости, а уж тем более если он не нужен от слова совсем.
И в качестве иллюстрации: