如何预测移动物体的未来位置?

时间:2013-02-06 20:48:57

标签: java math physics

我之前已经问过这个问题,由于它不是一个编程问题而被关闭了,这完全是因为我说错了。我想将此实现为java。我正在创造一个小游戏,我有一个光子鱼雷正在从一艘船向目标射击。现在,当鱼雷的速度很慢时,如果它们正在移动并且我想解决这个问题,它将永远不会击中任何目标。我已经制定了多个理论并绘制了大量数学资料,以找出实现这一目标的最佳方法,最后我推导出以下内容:

  1. 我发现光子鱼雷到达目标所需的时间。
  2. 我发现目标在鱼雷到达所需的时间内走了多远。
  3. 然后我找到了目标的新位置和原始船之间的距离。
  4. 这使我有机会使用余弦规则(SSS)找出子弹需要被发射的轨迹,以便有更高的击球机会。
  5. 这是一个数据库:

    A diagram of my problem

    现在唯一的问题是我需要将a线旋转到正确的方向,因为默认情况下它与c线平行,这会扰乱整个方程。有人能帮忙吗?而且,如果你能想出一个更好的方法来找到新的位置建议是非常受欢迎的。我的java游戏实体机制的工作原理如下:

    1. 每个实体都有两个控制移动的矢量。位置和速度。然而,速度没有完全正确地跟踪,而不是速度和方向,为了使事情更容易,它是xSpeed和ySpeed。
    2. 每个蜱实体都是更新一次,射击鱼雷的船只必须计算这一蜱的未来位置,而不是多个蜱。
    3. 我问这个问题不要再被关闭,因为这次我真的需要将答案实现到Java中。

      这是我到目前为止所尝试的数学:

              double dis = level.distanceBetween(photonTargetTop, this);
      
              double speed = 5;
      
              double time = dis / speed;
      
              double d1 = photonTargetTop.velocity.x * time;
              double d2 = photonTargetTop.velocity.y * time;
      
              double dis2 = level.distanceBetween(this, photonTargetTop.pos.x + d1, photonTargetTop.pos.y + d2);
      
              double dis3 = level.distanceBetween(photonTargetTop, photonTargetTop.pos.x + d1, photonTargetTop.pos.y + d2);
      
              double cosAngle = Math.pow(dis2, 2) + Math.pow(dis, 2) - Math.pow(dis3, 2) / 2 * dis2 * dis;
      
              double angle = Math.acos(cosAngle);
      
              EntityPhoton p = new EntityPhoton(this, level);
              p.rotation = angle;
              level.addEntity(p, pos);
      

1 个答案:

答案 0 :(得分:1)

让我们假设目标船没有加速度,这意味着它的速度和方向没有变化。

让我们假设一旦开火,你的鱼雷没有加速。它始终保持恒定速度。

我们也可以调用(0,0)你的鱼雷发射点。

该船描述了一条直线。选择此行上的一个点(如果船舶正在跟踪未经过的路线(0,0),您可以找到距离中心位置最近的点,并且可以在维基百科上查找某些几何体。)

一旦你选择了想要击中敌舰的位置,你知道(0,0)和那个位置之间的距离,并且鉴于鱼雷的速度总是相同的,你也可以知道什么时候发射鱼雷。 然后你还必须找到方向,意思是给出x和y的速度值,但这并不是那么困难。

一般来说问题是一个具有多个解决方案的系统,所以假设鱼雷比目标快,有无限点你可以点击它,所以你必须使用一些启发式来选择一个方便你的点。