Ваше приближение в основном диктует, что выстрелы приземляются на часть поверхности сферы, определяемой углом; область цели в пределах этой поверхности является константой; распределение вероятностей является постоянным на поверхности и нулем в других местах.
Gajet уже привел ряд веских причин, почему некоторые из этих допущений не совпадают, но придерживается той же модели неточности: ограниченная ошибка в угле. Результат все еще падает с r ^ -2, но с небольшой константой.
Скажем, у стрелка максимальный разброс 5 °. У него есть шанс стрельбы между ошибками 0 ° и 1 °, но площадь кольца между 4 ° и 5 ° намного больше, чем площадь кольца / круга между 0 ° и 1 °. Большие ошибки имеют большую вероятность возникновения. Увеличьте ошибку еще больше, и вероятность внезапно упадет до нуля, потому что мы вышли за пределы пяти градусов. Это не кажется очень реалистичным.
Более точное представление будет иметь Guassian распределения угловой погрешности, то есть: A(ϕ) = sqrt(a/π) exp(-a ϕ²)
. Переменная a может использоваться для включения навыка стрелка и т. Д. Обратите внимание, что это решение одномерное. Если ваша цель очень высокая по сравнению с ее шириной, вы можете вообще пропустить вертикальную ошибку и просто предположить, что выстрел попал на правильную высоту. Кроме того, вы можете выполнить вычисление дважды и умножить результат, предполагая, что цель примерно прямоугольная.
Для того, чтобы получить от функции вероятности к фактической вероятности попадания в цель, мы интегрируем функцию A и в конечном итоге с дорогой функции ошибки - которая на самом деле называется функция ошибки: p(ϕ) = erf(ϕ sqrt(a))
. Угол ϕ равен углу между целевой точкой и краем цели. С точки зрения целевого размера и с расстояния г: p(r) = erf(arctan(s/2r) sqrt(a))
. Эта функция показана ниже для цели размера 1 и значений точности a=2
и a=10
.
Обратите внимание, что в отличие от спада r ^ -2, вероятность аккуратно остается ниже единицы, независимо от того, насколько близка цель. Фактически, даже цель на точно нулевом расстоянии может быть пропущена из-за крайне малой вероятности, что ошибка составляет более 90 °.
Как я уже говорил, функция ошибок довольно дорогая, но ее аргумент ϕ sqrt(a)
не сильно отличается для любого разумного сценария шутера. Мы можем сделать намного лучше, оценивая часть серии Тейлора вместо этого и ограничивая результат. Во- первых, мы на карте x = arctan(s/2r) sqrt(a)
, а затем оценить: 2 x - (2/3) x^3 + (1/5) x^5 ...
. Пропустите или добавьте столько терминов, сколько считаете необходимым, но имейте в виду, что четное количество терминов вызовет нежелательное поведение на малых расстояниях. Ниже приведена функция реальной ошибки по сравнению с первыми тремя ненулевыми членами ее ряда Тейлора.
В заключение, это чисто математика. Добавьте пару синусоидальных функций, случайных коэффициентов и логарифмов, и ваша игра будет одинаково увлекательной.