2011-05-10 149 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。