Рассмотрим стрелка и цель. У меня вопрос: есть ли реалистичное приближение к вычислению вероятности попадания стрелка в цель?
Пренебрегая оружием и навыком стрелка, я предполагаю, что первое приближение должно быть таким, что вероятность попадания будет пропорциональна 1 / r ^ 2, где r - расстояние до цели.
Мотивация к этому отношению исходит из использования идеи, что площадь сферы, центрированной на стрелке, уменьшается как r ^ 2. Таким образом, вероятность поражения цели в худшем случае должна уменьшиться до 1 / r ^ 2.
Я пытался найти какое-нибудь отношение к любому оружию, но не нашел ...
Кто-нибудь знает больше информации по этой теме? Это приближение верно?
РЕДАКТИРОВАТЬ:
Больше на вопрос: я рассматриваю тактическую игру. В частности, я хотел бы смоделировать стрельбу между двумя юнитами (поэтому, не FPS-игра, игрок не целится, он издает приказы). Для этого я считаю, что у подразделения есть некоторый опыт, у оружия есть некоторая точность, а окружающая среда (туман, растительность и т. Д.) Влияет на общую точность. Прежде чем работать с какой-то сложной моделью, самая простая модель для тестирования учитывает все факторы постоянными, а точность зависит только от расстояния.
Вопрос в том, как эта точность зависит от расстояния. Моим первым предположением будет 1 / r ^ 2 -распад. Но, как уже упоминалось в комментариях, это выглядит как очень быстрое затухание.
источник
Ответы:
Ваше приближение в основном диктует, что выстрелы приземляются на часть поверхности сферы, определяемой углом; область цели в пределах этой поверхности является константой; распределение вероятностей является постоянным на поверхности и нулем в других местах.
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 ...
. Пропустите или добавьте столько терминов, сколько считаете необходимым, но имейте в виду, что четное количество терминов вызовет нежелательное поведение на малых расстояниях. Ниже приведена функция реальной ошибки по сравнению с первыми тремя ненулевыми членами ее ряда Тейлора.В заключение, это чисто математика. Добавьте пару синусоидальных функций, случайных коэффициентов и логарифмов, и ваша игра будет одинаково увлекательной.
источник
Вероятность, безусловно, является функцией 1 / r ^ 2, но не падает так быстро, как 1 / r ^ 2. Давайте не будем делать простую математику, и для простоты вычислений я сначала остановлюсь на 2D-съемке, которая приведет к 1D-ошибке при съемке. Цель всегда имеет одинаковую ширину, например, мы знаем, что цель имеет ширину в один метр. И мы также знаем, что при стрельбе пистолет может не попасть в цель с максимальным углом 5 градусов. вот рисунок, показывающий ситуацию:
Теперь посмотрим на эти три состояния. Предположим , что у них есть
h1
,h2
иh3
расстояние от угла. Основываясь на этих значениях и угле, мы можем рассчитать, сколько расстояние находится в этом состоянии. Он рассчитывается так же просто, какh*tan(10/2)*2
(как показано на рисунке 2).Мы знаем это
h/l = cos(theta/2)
иr/l = sin(theta/2)
=>r/h = sin(theta/2)/cos(theta/2) = tan(theta/2)
=>r = h*tan(theta/2)
=>edge length = h*tan(theta/2)*2
С другой стороны, мы знаем, что сама цель имеет ширину 1 метр, поэтому, если это значение будет меньше одного метра, мы всегда будем поражать. после этой части он имеет вероятность
"target surface"/"hit area"
, равную1 / (h*tan(10/2)*2)
. Обратите внимание, что мы всегда можем предположить, что вся поверхность цели находится внутри конуса огня. это не сильно влияет на игровой процесс, но сильно облегчает вычисления!Теперь вернемся к нашей проблеме 3D с 2D-целью. Поскольку речь идет о конусе, пуля всегда будет проходить через круг определенного диаметра при прохождении цели. снова нам нужно вычислить его радиус, а затем площадь этого круга. Как я уже объяснил, мы можем использовать,
r=h*tan(10/2)*2
и, следовательно, площадь поверхностиpi*r^2 = h^2*tan^2(10/2)*4 * pi
. И, в конце концов, мы знаем, что вероятность есть"target area"/"circle area" = 1 / h^2*tan^2(10/2)*4 * pi
. как я сказал, это функция h ^ 2, но, посколькуtan^2(5)
она очень мала, требуется много времени, прежде чем эта вероятность упадет до очень низкой величины.источник
Для этого вам нужно определенное понятие «неточность». Что такое неточность? Как это работает? Если вы кодируете ИИ, который стреляет и каждый раз вычисляет точный путь, то очевидно, что погрешность равна 0 на любом расстоянии.
Любой стреляющий ИИ сначала определяет идеальный путь, а затем добавляет неточность прицеливания. Эта неточность полностью определена вами, и это определение необходимо, прежде чем можно будет рассчитать любую вероятность.
источник