2011-05-10 147 views
4

我正在Flash中使用Box2D實現一個簡單的排球比賽。我需要爲CPU播放器實現一些AI。我們叫他傑克吧。所以傑克需要預測球被人類球員約翰擊中後球會落在哪裏。我有以下信息:預測球路徑 - 人工智能

  1. 初始線速度(無論是在X & y方向)的球,當約翰 撞擊它。
  2. John擊中球時的初始位置。 (x & y座標 值)
  3. 重力的值。
  4. 樓層的y位置值是球會落下的位置。
  5. 約翰擊球的角度。
  6. 球遵循射彈軌跡。

因此,傑克需要預測當它碰到地板時球的位置(x值)是多少。

我覺得把球遵循彈道軌跡的問題,可能會被視爲相同的 - 從一些已知的初始位置,已知初始速度與固定重力發射炮彈,並預測其着陸點。着陸點的y值也是已知的。空氣阻力爲零。

有什麼樣的數學公式可能有助於預測着陸點的x值嗎?我看了一些拋射方程式,但其中大多數都以'時間'作爲變量。我需要一個不涉及這個'時間'變量的解決方案。任何形式的這個問題的解決方法也將不勝感激。謝謝! :)

+1

這不是人造智能,而是外部彈道學。我認爲AI會在晚些時候進來。 – 2011-05-10 17:59:50

+2

無論如何,你的排球比賽是否必須模擬球的運動?爲什麼不在AI部分使用同樣的東西?實際上,我認爲,預先計算一次軌跡並將其用於時間演變和AI行動是完全正確的。也許通過在頂部添加一些隨機錯誤來降低AI的運行軌跡,從而調整Jack的遊戲質量?找到第一次地面接觸的地方將僅僅是軌跡上的後處理步驟。 – 2011-05-10 18:01:37

+0

@大衛 - 是的,你可以這麼說!但是關於「人工智能遊戲開發」的大部分書籍都包含了預測彈丸軌跡的主題。 :) @Tilman - 實際上,先生,我使用Box2D來模擬球的運動和碰撞,它負責處理所有這些數學問題。所以我不能使用它,直到我真正瞭解這背後的數學。我很感謝你的建議,但如果我不知道方程式,恐怕我無法預先計算軌跡運動。 – 2011-05-10 18:31:18

回答

2

如果你有在t條款z(即高度)的公式,那麼你需要解決的z = 0得到的t當球土地的價值。然後,您可以將其反饋回公式爲xy

+0

請您詳細說明一下嗎?我仍然不明白。我在數學上有點虛弱。抱歉給你帶來不便。 – 2011-05-10 18:39:44

+0

@Anubhav:你說你有't'方程嗎?所以你有'x = f1(t)','y = f2(t)','z = f3(t)'哪裏'f1','f2'和'f3'是一些函數?如果是這樣的話,那麼當球擊中地面時我們需要找出時間't';你可以通過求解'z'方程來做到這一點。但是在這個時候't',還會有'x'和'y'的特定值,可以簡單地通過將該數字代入前兩個等式來找到。 – 2011-05-11 09:21:38

1

你必須用下面的方程求解z(x)= 0: g是重力,v0是沿x軸的初始速度,a是角度。

Equation of z with x variable

當你解決它,它賦予段接合開始點和結束點的長度(選擇一個端點依賴於命中方向)。

Resolution

如果您在3D的時候,你就必須做一些預測,以消除問題的3D部分,並保持只有兩個軸。

+0

這很有趣。我會執行它並檢查結果。謝謝您的幫助。 – 2011-05-10 18:37:28

+0

如果您將着陸時間解決爲中間步驟,並且使用給定的速度而不是與角度混淆,則更簡單。 – Beta 2011-05-10 22:34:23

0

初始線速度(無論是在X &ý 方向)上的球的當約翰擊中 它。

時 約翰擊中它的球的初始位置。(x & y座標 值)

重力的值。

而且方向 - 負y方向,當然。 32.2 ft/sec^2 = 9.8 m/sec^2,對吧?

地板的y位置的值 球會落在哪裏。

如果沒有其他玩家接觸它,它會在y = 0時擊中。

約翰擊球的角度。

我認爲最好說一下約翰適用於球的力量和持續時間。

該球跟隨彈丸 的軌跡。

不,你沒有這樣的事情。這就是你想要解決的問題。

你有什麼是牛頓定律:F = ma,其中力是施加在球上的力的矢量,m是球的質量,a是施加到球上的加速度矢量。

球在重力的作用下沿負y方向加速,當然,但你忘記了球在擊球時所施加的力矢量。

一旦你有那些你在時間上解決兩個耦合ODEs。