我有一个游戏,我知道目标的位置和速度。我知道我自己的位置和我的炮弹的速度。我想确定
-
我发射的炮弹和目标之间的交叉点的位置,或者
-
我的炮弹与目标相交所花费的时间
所有实体都以恒定的速度和方向行进,这使生活更轻松。我试着算出这数学题已经有一段时间了,但还是没能把它做对。我知道目标与炮弹相交的预测位置将是
Pp=Tp+Tv*t
其中,Pp是预测位置,Tp是当前目标位置,Tv是目标速度,t是时间。
我也知道t=|Pp-Sp|/Bs
其中Sp是我的(源(位置,Fs是抛射物(子弹(速度。但我想不出一种方法来解决这个问题,要么得到Pp,要么得到t.
有人能启发我吗?感谢
我发现一个网站详细介绍了一种方法,但这似乎不起作用(http://howlingmoonsoftware.com/wordpress/leading-a-target/)。我确定它是否有效的验证方法是使用预测的位置来确定目标到达目标和炮弹到达目标的时间。这些应该非常相似,但在我的游戏中,它们几乎相差2倍。
我设法使用余弦规则和二次方程解决了这个问题,同时在线找到了另一个解决方案。
基于余弦规则
c^2=a^2+b^2-2ab.cos(c(
我们知道角度C,因为它是目标方向和我们与目标的相对位置之间的角度
我们知道b,因为它是我们和目标之间的距离
我们知道a是时间*目标速度
我们知道c是时间*射弹速度
这降低得到二次
(项目速度^2-目标速度^2(*t^2+2*目标速度*距离目标*cos(C(*t-距离目标^2=0
这可以使用二次型替代形式来解决:
t=2c/(-b+sqrt(b^2-4ac((
一旦我们有了t,我们就可以使用PredictionPos=TargetPos+t*TargetVelocity
为了验证结果是否正确,我们可以计算出目标到达目的地和抛射物到达目的地的时间-这些时间应该等于
我相信二次方程实际上是t=(-b±sqrt(b^2-4ac((/2a。我本想补充这一点作为评论,但我缺乏所需的声誉。