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

#math #geometry #artificial-intelligence #box2d

#математика #геометрия #искусственный интеллект #box2d

Вопрос:

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

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

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

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

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

Комментарии:

1. Это не столько искусственный интеллект, сколько внешняя баллистика. Я предполагаю, что ИИ появится позже.

2. Разве ваша игра в волейбол в любом случае не должна имитировать движение мяча? Почему бы не использовать то же самое в части искусственного интеллекта? На самом деле, я думаю, что совершенно нормально один раз предварительно рассчитать траекторию и использовать ее как для временной эволюции, так и для действий ИИ. Может быть, ухудшить траекторию для ИИ, добавив сверху какую-нибудь случайную ошибку, которая позволяет настроить качество игры Джека? Тогда определение места первого контакта с землей было бы просто этапом последующей обработки траектории.

3. @David — Да, ты можешь так говорить! Но большинство книг по «Искусственному интеллекту для разработки игр» включают в себя тему прогнозирования траектории снаряда. 🙂 @Tilman — На самом деле, сэр, я использую Box2D для имитации движения мяча и столкновения, которое учитывает все эти математические моменты. Так что я не могу использовать его, пока на самом деле не разберусь в математике, стоящей за этим. Я ценю ваше предложение, но, боюсь, я не смогу заранее рассчитать траекторное движение, если не буду знать уравнений.

4. Я не знаю Box2D, но разве у него нет интерфейса для извлечения траектории? Я думаю, вам не нужно знать уравнения, если у вас есть «black-Box2D», который просто дает вам то, что вам нужно (траекторию).

Ответ №1:

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

Комментарии:

1. Не могли бы вы, пожалуйста, рассказать немного подробнее? Я все еще не понимаю. Я немного слаб в математике. Извините за неудобства.

2. @Anubhav: Вы говорите, у вас есть уравнения в терминах t ? Итак, у вас есть x = f1(t) , y = f2(t) , z = f3(t) где f1 , f2 и f3 какие-то функции? Если это так, то нам нужно найти время, t когда мяч ударится о землю; вы можете сделать это, решив z уравнение. Но в это время t также будут определенные значения x и y , которые можно найти, просто вставив это число обратно в первые два уравнения.

Ответ №2:

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

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

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

Разрешение

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

Комментарии:

1. Это интересно. Я это внедрю и проверю результаты. Спасибо за помощь.

2. Будет проще, если вы решите время приземления в качестве промежуточного шага и будете использовать заданные скорости вместо того, чтобы возиться с углами.

Ответ №3:

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

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

Значение силы тяжести.

И направление — отрицательное y-направление, конечно. 32.2 ft/sec^2 = 9.8 m/sec^2 , верно?

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

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

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

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

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

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

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

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

Как только у вас это будет, вы решите два связанных задания вперед во времени.