Math 预测球路-人工智能

Math 预测球路-人工智能,math,geometry,artificial-intelligence,box2d,Math,Geometry,Artificial Intelligence,Box2d,我正在用Flash中的Box2D实现一个简单的排球游戏。我需要为CPU播放器实现一些AI。我们叫他杰克吧。所以杰克需要预测球被人类球员约翰击中后会落在哪里。我有以下资料: 当John移动时,球的初始线速度(x和y方向) 击中它 约翰击球时球的初始位置。(x&y坐标) 价值观) 重力的价值 球要落下的地板y位置的值 约翰击球的角度 球沿着抛射体的轨道运动 因此,杰克需要预测球落地时的位置(x值) 我认为,当球沿着抛射物的轨道运动时,问题可能与从已知初始位置、已知初始速度和固定重力发射炮弹并预测其着

我正在用Flash中的Box2D实现一个简单的排球游戏。我需要为CPU播放器实现一些AI。我们叫他杰克吧。所以杰克需要预测球被人类球员约翰击中后会落在哪里。我有以下资料:

  • 当John移动时,球的初始线速度(x和y方向) 击中它
  • 约翰击球时球的初始位置。(x&y坐标) 价值观)
  • 重力的价值
  • 球要落下的地板y位置的值
  • 约翰击球的角度
  • 球沿着抛射体的轨道运动
  • 因此,杰克需要预测球落地时的位置(x值)

    我认为,当球沿着抛射物的轨道运动时,问题可能与从已知初始位置、已知初始速度和固定重力发射炮弹并预测其着陆点的问题相同。着陆点的y值也是已知的。空气阻力为零


    有没有什么数学方程式可以帮助预测着陆点的x值?我看了一些射弹方程,但大多数方程都以“时间”为变量。我需要一个不涉及这个“时间”变量的解决方案。任何解决这个问题的方法都将受到欢迎。谢谢!:)

    如果你有一个关于
    z
    (即高度)的方程,即
    t
    ,那么你需要求解
    z=0
    ,以获得球落地时
    t
    的值。然后,您可以将其反馈到
    x
    y
    的方程中,您必须使用此方程求解z(x)=0: g是重力,v0是沿x轴的初始速度,a是角度

    求解时,它会给出连接起点和终点的线段长度(根据命中方向选择一个终点)

    如果你在3D中,你必须做一些投影来消除问题的3D部分,并且只保留两个轴

    初始线速度(x和y方向) 约翰击球时球的方向 它

    击球时球的初始位置 约翰成功了。(x&y坐标) 价值观)

    重力的价值

    方向-当然是负y方向<代码>32.2英尺/秒^2=9.8米/秒^2,对吗

    楼层y位置的值 球会掉到哪里去

    如果没有其他玩家接触它,它将在y=0时命中

    约翰击球的角度

    我认为最好谈谈约翰对球施加的力以及持续多长时间

    球随炮弹运动 轨迹

    不,你没有这种东西。这就是你想要解决的问题

    你得到的是牛顿定律:
    F=ma,
    其中,力是施加在球上的力的矢量,m是球的质量,a是施加在球上的加速度矢量

    当然,球在负y方向上受到重力的加速,但是你忘记了球员在击球时应用的力矢量


    一旦你有了这些,你就可以及时解决两个耦合的ODE。

    这与其说是人工智能,不如说是外部弹道。我想AI会晚一点出现。你的排球比赛不需要模拟球的运动吗?为什么不在人工智能部分使用相同的功能?事实上,我认为,预先计算一次轨迹并将其用于时间演化和人工智能操作是非常好的。也许通过在顶部添加一些随机错误来调整杰克的比赛质量,从而恶化AI的轨迹?找到第一次与地面接触的地点只是轨迹上的一个后处理步骤。@David-是的,你可以这么说!但大多数关于“人工智能用于游戏开发”的书籍都包含了预测投射物轨迹的主题@Tilman-事实上,先生,我用Box2D来模拟球的运动和碰撞,它处理了所有这些数学问题。因此,在我真正了解这背后的数学知识之前,我无法使用它。我很感激你的建议,但如果我不知道方程式,恐怕我首先无法预先计算轨迹运动。我不知道Box2D,但它没有提取轨迹的接口吗?我想,如果你有一个“黑盒2D”,你不需要知道方程,它只提供你需要的东西(轨迹)。这很有趣。我将实施它并检查结果。谢谢你的帮助。如果你把着陆时间作为一个中间步骤来求解,使用给定的速度,而不是把角度弄得乱七八糟,那会更简单。请你再详细一点好吗?我还是不明白。我的数学有点弱。很抱歉给您带来不便。@Anubhav:您说您有关于
    t
    的方程式?所以你有
    x=f1(t)
    y=f2(t)
    z=f3(t)
    其中
    f1
    f2
    f3
    是一些函数吗?如果是这样,那么我们需要找到球落地的时间
    t
    ;您可以通过求解
    z
    方程来实现这一点。但此时,还将出现特定的
    x
    y
    值,只需将该值插入前两个方程即可找到。