14

我正在开发一款游戏,其中包含寻的导弹。此刻他们只是转向他们的目标,这产生了一个相当愚蠢的结果,所有的导弹都在跟踪目标。

我想制造一种更致命的导弹,当它到达那里时,它会瞄准目标“将在”的地方,我对如何做到这一点有点卡住和困惑。

我猜我需要弄清楚我的目标在未来的某个时间点会在哪里(无论如何都是猜测),但我无法弄清楚要向前看多远。它需要基于导弹离目标的距离,但它也在移动目标。

我的导弹有一个恒定的推力,但转向能力很弱。希望他们会快速而令人兴奋,但像牛一样驾驶(即,对于那里的非 HitchHiker 粉丝来说,这很糟糕)。

无论如何,对于 Stack Overflow 来说,这似乎是一个可以帮助我解决的有趣问题,因此任何关于更好或更“有趣”导弹的想法或建议都将不胜感激。

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

4

5 回答 5

21

您的建议称为“命令指导”,但有一种更简单、更好的方法。

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

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

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

在 3-d 问题中是相同的,除了“LOS 率的变化”,(以及合成的导弹转向率)本身就是一个向量,即它不仅有一个量级,还有一个方向(我是向左、向右还是向左转动导弹?向上或向下或向右水平上方 30 度等??...想象一下,作为一名导弹飞行员,您将“设置机翼”以施加升力...

雷达制导导弹,它“知道”关闭率。根据接近度调整比例常数(接近度越高,导弹试图转向的速度越快),这样导弹在高接近度情况下会更积极地转弯(当飞行时间较短时),而在低度接近度时则更不积极(追尾)当它需要节省能量时。其他不知道闭合的导弹(如响尾蛇)使用恒定的预定比例值)。FWIW,越南时代的 AIM-9 响尾蛇使用的比例常数为 4。

于 2009-07-29T19:09:41.767 回答
15

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

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

(此外,隐藏在该文章底部的评论中的是对一些 C++ 代码的引用,这些代码完成了 Unreal wiki中的相同任务)

于 2009-07-29T19:09:10.503 回答
5

看看OpenSteer。它有解决此类问题的代码。查看“steerForSeek”或“steerForPursuit”。

于 2009-07-29T19:12:35.410 回答
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 中的数学运算更加困难,但过程是相同的。

于 2009-07-29T19:10:26.803 回答
0

您需要将目标和导弹的轨迹作为时间的函数进行插值。然后寻找对象的坐标在一些可接受的误差范围内的时间。

于 2009-07-29T19:09:31.143 回答