4

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

  1. 项目清单
  2. 我找到了光子鱼雷到达目标所需的时间。
  3. 我发现目标在鱼雷到达的时间内走了多远。
  4. 然后我找到目标的新位置和原船之间的距离。
  5. 这让我有机会使用余弦规则 (​​SSS) 来找出子弹需要发射的轨迹才能有更高的击中机会。

这是一个图表:

我的问题示意图

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

4

1 回答 1

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

于 2013-02-05T19:53:02.123 回答