Прогнозирование траектории мяча — искусственный интеллект

Я реализую простую игру в волейбол, используя Box2D во Flash. Мне нужно реализовать некоторый ИИ для CPU player. Назовем его Джек. Итак, Джеку нужно предсказать, куда приземлится мяч после того, как по нему ударит Джон, игрок-человек. Имею следующую информацию:

  1. Начальная линейная скорость (в обоих направлениях x и y) мяча, когда Джон ударяет по нему.
  2. Исходное положение мяча, когда Джон ударяет по нему. (значения координат x и y)
  3. Значение гравитации.
  4. Значение y положения пола, на которое упадет мяч.
  5. Угол, под которым Джон бьет по мячу.
  6. Мяч летит по траектории снаряда.

Итак, Джеку нужно предсказать, каково будет положение (значение x) мяча, когда он упадет на пол.

Я думаю, что когда мяч следует по траектории снаряда, проблема может рассматриваться так же, как и проблема выстрела пушечным ядром из некоторого известного начального положения, известной начальной скорости с фиксированной силой тяжести и предсказания места его приземления. Также известно значение y точки приземления. Сопротивление воздуха равно нулю.

Есть ли какое-нибудь математическое уравнение, которое могло бы помочь предсказать значение x точки приземления? Я взглянул на некоторые уравнения снарядов, но в большинстве из них «время» используется как переменная. Мне нужно иметь решение, которое не включает эту переменную «время». Любые обходные пути для этой проблемы также будут оценены. Спасибо! :)


person Anubhav Sharma    schedule 10.05.2011    source источник
comment
Это не столько искусственный интеллект, сколько внешняя баллистика. Я предполагаю, что ИИ появится позже.   -  person David Thornley    schedule 10.05.2011
comment
Разве ваша волейбольная игра не должна имитировать движение мяча? Почему бы не использовать то же самое в части AI? На самом деле, я думаю, совершенно нормально предварительно рассчитать траекторию один раз и использовать ее как для временной эволюции, так и для действий ИИ. Может быть, ухудшить траекторию для ИИ, добавив сверху какую-нибудь случайную ошибку, позволяющую настроить качество игры Джека? Тогда поиск места первого контакта с землей будет просто этапом постобработки траектории.   -  person Tilman Vogel    schedule 10.05.2011
comment
@ Дэвид - Да, ты можешь так сказать! Но большинство книг по «Искусственному интеллекту для разработки игр» включают в себя эту тему предсказания траектории снаряда. :) @Tilman - На самом деле, сэр, я использую Box2D для моделирования движения и столкновения мяча, который позаботится обо всех этих математических вещах. Поэтому я не могу использовать его, пока не узнаю математику, стоящую за этим. Я ценю ваше предложение, но боюсь, что не смогу предварительно рассчитать движение по траектории, если не знаю уравнений.   -  person Anubhav Sharma    schedule 10.05.2011
comment
Я не знаю Box2D, но разве у него нет интерфейса для извлечения траектории? Думаю, вам не нужно знать уравнения, если у вас есть black-Box2D, который просто дает вам то, что вам нужно (траекторию).   -  person Tilman Vogel    schedule 11.05.2011


Ответы (3)


Если у вас есть уравнение для z (то есть высоты) через t, то вам нужно решить его для z = 0, чтобы получить значение t, когда мяч приземлится. Затем вы можете вернуть это в уравнения для x и y.

person Oliver Charlesworth    schedule 10.05.2011
comment
Не могли бы вы уточнить немного больше? Я все еще не понимаю. Я немного слаб в математике. Простите за неудобства. - person Anubhav Sharma; 10.05.2011
comment
@Anubhav: Вы говорите, что у вас есть уравнения с точки зрения t? Итак, у вас есть x = f1(t), y = f2(t), z = f3(t), где f1, f2 и f3 — некоторые функции? Если это так, то нам нужно найти время t, когда мяч коснется земли; вы можете сделать это, решив уравнение z. Но в это время t будут также определенные значения x и y, которые можно найти, просто подставив это число обратно в первые два уравнения. - person Oliver Charlesworth; 11.05.2011

Вы должны решить z(x)=0 с помощью этого уравнения: g — сила тяжести, v0 — начальная скорость по оси x, a — угол.

Уравнение z с переменной x

Когда вы решаете его, он дает длину сегмента, соединяющего начальную точку и конечную точку (выберите одну конечную точку в зависимости от направления удара).

Разрешение

Если вы работаете в 3D, вам придется сделать несколько проекций, чтобы убрать трехмерную часть проблемы и оставить только две оси.

person Joan Rieu    schedule 10.05.2011
comment
Это интересно. Я реализую это и проверю результаты. Спасибо за помощь. - person Anubhav Sharma; 10.05.2011
comment
Будет проще, если вы определите время приземления в качестве промежуточного шага и будете использовать заданные скорости вместо того, чтобы возиться с углами. - person Beta; 11.05.2011

Начальная линейная скорость (в обоих направлениях x и y) мяча, когда Джон ударяет по нему.

Исходное положение мяча, когда Джон ударяет по нему. (значения координат x и y)

Значение гравитации.

И направление - отрицательное по оси Y, разумеется. 32.2 ft/sec^2 = 9.8 m/sec^2, верно?

Значение y положения пола, на которое упадет мяч.

Он попадет в точку y = 0, если его не коснется ни один другой игрок.

Угол, под которым Джон бьет по мячу.

Я думаю, было бы лучше сказать что-нибудь о силе, которую Джон прикладывает к мячу, и о том, как долго.

Мяч летит по траектории снаряда.

Нет, у вас нет такого. Это то, что вы пытаетесь решить.

У вас есть закон Ньютона: F = ma, где сила — это вектор силы, приложенной к мячу, m — масса мяча, а — вектор ускорения, приложенный к мячу.

Мяч, конечно, ускоряется под действием силы тяжести в отрицательном направлении по оси Y, но вы забываете о векторе силы, который применяет игрок при ударе по мячу.

Получив их, вы решите два связанных ОДУ вперед во времени.

person duffymo    schedule 10.05.2011