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

4
我正在制作一个小游戏,其中有一枚光子鱼雷从飞船中发射并瞄准目标。由于鱼雷的速度较慢,如果目标移动,飞船将永远无法击中它们,因此我想解决这个问题。我提出了多种理论,并绘制了大量数学内容,以找到实现这一目标的最佳方法,最终我推导出以下结论:
  1. 列出项目
  2. 计算光子鱼雷到达目标所需时间。
  3. 计算目标在光子鱼雷到达时所行驶的距离。
  4. 然后计算新的目标位置与原始飞船之间的距离。
  5. 这样就可以使用余弦定律(SSS)来确定必须发射子弹的轨迹,以获得更高的命中率。

这是一个图示:

A diagram of my problem

现在唯一的问题是需要将线a旋转到正确的方向,因为默认情况下它与线c平行,这会破坏整个方程。谁能帮忙解决这个问题?如果您能想到更好的方法来确定新位置,欢迎提供建议 :)


可能更适合发布在:http://physics.stackexchange.com/ - BinaryTox1n
我不太同意,因为这是一个编程问题。然而,由于它涉及编程和物理学的混合,所以并不重要。但还是感谢您的意见。 - Shaun Wild
你没有提出任何具体的实现或算法问题。你的问题是一个好问题。只是一个物理问题,而不是一个编程问题。如果你在那里问,你也可能会更快地得到更好的答案。一旦你有了公式,你就可以来这里寻求实现帮助。 - BinaryTox1n
数学.stackexchange怎么样? - Shaun Wild
根据数学和物理学的常见问题解答页面,您的问题应该发布在物理学网站上。 - BinaryTox1n
显示剩余3条评论
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

我没有跟踪目标速度。而计算其位置的函数只能运行一次,因此无法推导出速度,所以我无法使用这种方法 :( - Shaun Wild
@ShaunWild 在你的图表中,目标看起来是以5米/秒的速度移动?无论如何,如果目标在移动,但速度未知,你就无法确定要瞄准多远。 - Windle
在图表中,“4 m/s”是什么意思? - beaker
@ShaunWild 我认为图中的4 m/s是C到B方向上的目标速度。 - Shivam
1
是的,要知道目标移动的方向是必要的,否则就无法解决未来位置的问题。 - Shivam
显示剩余2条评论

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