如何为游戏制作“拦截导弹”?

时间:2009-07-29 19:05:21

标签: physics trigonometry

我正在制作一款有导弹的导弹。此刻他们只是转向他们的目标,这会产生一个相当愚蠢的结果,所有的导弹跟随目标。

我想创造一种更致命的导弹风格,它会瞄准目标“将会到达目标的地方”,而且我对如何做到这一点感到困惑和困惑。

我猜我将需要在将来的某个时刻找到我的目标(无论如何都是猜测),但是我无法理解未来的目标。它需要基于导弹远离目标的距离,但目标也在移动。

我的导弹有不断的推力,而且转向能力很弱。希望是他们会快速而令人兴奋,但是像牛一样操纵(即,对于非HitchHiker的粉丝来说非常糟糕)。

无论如何,Stack Overflow似乎是一个有趣的问题,可以帮助我解决,所以任何关于更好或“更有趣”的导弹的想法或建议都会感激不尽。

接下来将是人工智能躲避他们......

5 个答案:

答案 0 :(得分:21)

你所建议的是“命令指导”,但有一种更简单,更好的方式。

真实导弹通常采用的方式(并非所有都是相同的)都使用称为比例导航的系统。这意味着导弹在与导弹和目标之间的视线(LOS)相同的方向上“转向”,转弯速率与LOS速率“成比例”...这将做你所喜欢的要求当LOS率为零时,你正处于碰撞过程中。

您可以通过比较一秒钟与下一秒钟之间的误导线和目标线之间的斜率来计算LOS率。如果斜率没有变化,那么你就处于碰撞过程中。如果它正在改变,计算变化并按比例角速率转动导弹......你可以使用任何代表导弹和目标位置的指标。

例如,如果使用比例常数2,并且LOS以2度/秒向右移动,则以4度/秒向右转动导弹。 LOS以6度/秒的速度向左移动,以12度/秒的速度向左导弹......

三维问题是相同的,除了“LOS率的变化”,(和导致的导弹转弯率)本身就是一个向量,即它不仅有一个幅度,而且还有一个方向(我是否把导弹向左转) ,向右或向上或向下或在水平向右上方30度等等......想象一下,作为导弹飞行员,你将“设置机翼”来应用升力......

雷达制导导弹,“知道”关闭率。根据闭合调整比例常数(闭合越高,导弹试图转动的速度越快),以便导弹在高闭合情况下(当飞行时间较短时)转向更积极,而在低闭合时则不那么积极(尾巴追逐)它需要节约能源。 其他导弹(如Sidewinders),不知道闭合,使用恒定的预定比例值)。 FWIW,越南时代AIM-9侧翼使用比例常数为4。

答案 1 :(得分:16)

之前我使用过这个CodeProject文章 - 它有一些非常好的动画来解释数学。

“瞄准和模拟导弹的数学:从微积分到四次方程式”: http://www.codeproject.com/KB/recipes/Missile_Guidance_System.aspx

(另外,隐藏在该文章底部的评论中的是对虚幻维基的some C++ code that accomplishes the same task的引用)

答案 2 :(得分:5)

看看OpenSteer。它有代码来解决这样的问题。看看'steerForSeek'或'steerForPursuit'。

答案 3 :(得分:1)

您是否考虑过最近轴承随时间变化的负面反馈?

作为练习留下的详细信息。

建议是完全严重的:如果目标没有机动,这应该获得接近最佳的拦截。即使目标正在积极躲避,它也应该收敛。

需要更多细节?

在二维空间中求解以便于表示法。以\vec{m}为导弹的位置,向量\vec{t}成为目标的位置。 上一时间单位的运动方向上的当前航向:\vec{h} = \bar{\vec{m}_i - \vec{m}_i-1}}。设r是导弹和目标之间的标准化矢量:\vec{r} = \bar{\vec{t} - \vec{m}}。轴承是b = \vec{r} \dot \vec{h}在每次刻度时计算轴承及其变化,并改变航向以使该数量最小化。

由于需要在每一步找到作用平面,因此数学在3d中是较为困难的,但过程是相同的。

答案 4 :(得分:0)

你需要插入目标和导弹的轨迹作为时间的函数。然后查找对象坐标在某个可接受的误差范围内的时间。