预测球的路径 - 人工智能

4
我正在使用Box2D在Flash中实现一个简单的排球游戏。我需要为CPU玩家实现一些人工智能,我们称其为Jack。因此,Jack需要预测John击打球后球将落地的位置。我有以下信息:
1. John击打球时球的初始线速度(x和y方向)。
2. John击打球时球的初始位置(x和y坐标值)。
3. 重力值。
4. 球落地的地面的y位置。
5. John击打球的角度。
6. 球沿抛物线轨迹运动。
因此,Jack需要预测球落地时的位置(x值)。
我认为,由于球沿着抛物线轨迹运动,这个问题可能与从某个已知的初始位置发射炮弹相同,已知初始速度和固定重力以及预测它的着陆点。着陆点的y值也是已知的。空气阻力为零。
是否有任何数学方程可以帮助预测着陆点的x值?我查看了一些抛射方程,但大多数都将“时间”作为变量。我需要一个不涉及“时间”变量的解决方案。对于这个问题的任何解决方法也将不胜感激。谢谢! :)

1
这不是人工智能,而是外部弹道学。我猜人工智能稍后会介入。 - David Thornley
2
你的排球游戏不是必须要模拟球的运动吗?为什么不在AI部分中使用相同的方法呢?实际上,我认为预先计算一次轨迹并将其用于时间演化和AI动作是完全可以的。也许通过在轨迹上添加一些随机误差来使AI的轨迹恶化,从而允许调整Jack的游戏质量?然后,找到第一个地面接触点只是轨迹的后处理步骤。 - Tilman Vogel
@David - 是的,你可以这么说!但是大多数关于“游戏开发中的人工智能”的书籍都包括了预测弹道轨迹的主题。 :)@Tilman - 实际上,先生,我正在使用Box2D来模拟球的运动和碰撞,它会处理所有这些数学问题。因此,如果我不知道方程式,我就无法预先计算弹道运动。我感谢您的建议,但恐怕我不能使用它。 - Anubhav Sharma
我不了解Box2D,但它是否有一个接口来提取轨迹?我猜,如果你有一个“黑盒子2D”可以直接给你所需的轨迹,那么你就不需要知道方程式了。 - Tilman Vogel
3个回答

2

如果您有一个关于t的方程来表示z(即高度),那么您需要解决z = 0以获得球落地时t的值。然后,您可以将该值反馈到xy的方程中。


能否请您再详细解释一下?我还不太理解。我数学有点差,抱歉造成不便。 - Anubhav Sharma
@Anubhav:你说你有关于t的方程?所以你有x = f1(t)y = f2(t)z = f3(t),其中f1f2f3是一些函数?如果是这种情况,那么我们需要找到球落地时的时间t;您可以通过解决z方程来实现这一点。但在这个时间t,也会有特定的xy值,可以通过将该数字插入前两个方程中来简单地找到。 - Oliver Charlesworth

1

你需要使用以下方程式解决 z(x)=0 问题: g 代表重力,v0 代表沿 x 轴的初始速度,a 代表角度。

Equation of z with x variable

当你解决它时,它会给出连接起点和终点的线段长度(根据击中方向选择一个端点)。

Resolution

如果你在做3D编程,你需要进行一些投影来消除问题中的3D部分,只保留两个轴。


很有趣。我会实现并检查结果。感谢你的帮助。 - Anubhav Sharma
如果你先解出着陆时间,然后使用给定的速度而不是摆弄角度,就会更简单。 - Beta

0
球被约翰击打时的初始线速度(x和y方向均需)。
球被约翰击打时的初始位置(x和y坐标值)
重力值。
方向为负y方向,当然了。32.2英尺/秒^2 = 9.8米/秒^2,对吗?
球掉落时与地面的y位置值。
如果没有其他球员碰触它,它将在y = 0处落地。
约翰击打球的角度。
我认为最好说一下约翰施加于球上的力以及持续时间。
球沿着抛物线轨迹运动。
不,你没有这样的东西。这就是你要解决的问题。
你所拥有的是牛顿定律:F = ma,其中力是施加于球上的力的向量,m是球的质量,a是施加于球上的加速度向量。

球受到重力的加速度在负y方向,当然,但你忘了球员击打球时施加的力向量。

一旦你有了它们,就可以将它们解决为两个耦合的常微分方程,并沿着时间轴前进。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接