如何计算移动物体的未来位置?

时间:2013-02-05 19:17:39

标签: java math physics

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

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

    A diagram of my problem

    现在唯一的问题是我需要将a线旋转到正确的方向,因为默认情况下它与c线平行,这会扰乱整个方程。有人能帮忙吗?而且,如果你能想出一个更好的方法来找到新的立场,我们非常欢迎你提出建议:)

1 个答案:

答案 0 :(得分:2)

看起来游戏是2D。现在,采取所有世界坐标:

Target Position: {xt, yt}
Target Velocity: {vxt, vyt}
Ship Position:   {xs, ys}

现在,让我们说你在方向{bx, by}上击中一颗子弹它是一个方向向量或单位向量。子弹的速度为sb。因此,在时间t'中,子弹和目标的空间坐标将为:

Target New Position: {xt + vxt*t', yt + vyt*t'}
Bullet New Position: {xs + bx*sb*t', ys + by*sb*t'} ( bullet starts from ship)

因为,此时子弹和目标必须只在一个位置,然后我们可以说子弹击中了目标。因此,我们可以将新目标位置替换为等于新子弹位置(在时间t'之后):

xt + vxt*t' = xs + bx*sb*t'
yt + vyt*t' = ys + by*sb*t'

正如我之前所说,bxby是方向向量,因此bx^2 + by^2 = 1

(xt + vxt*t' - xs)/(sb*t') = bx
(yt + vyt*t' - ys)/(sb*t') = by
bx^2 + by^2 = 1

因此,在平方并添加它们之后,您将得到:

(yt + vyt*t' - ys)^2 + (xt + vxt*t' - xs)^2 = (sb*t')^2

这是一个带有一个变量的二次方程:t'解决它,然后你可以找到bxby