我有一个游戏,我知道目标的位置和速度。我知道我自己的位置和我的射弹的速度。我想确定
我射击的射弹与目标之间交叉点的位置,或
我的射弹与目标相交的时间
所有实体都在以恒定的速度和方向行进,这使生活更轻松。我一直试图计算出数学,但不能完全正确。我知道与射弹相交的目标的预测位置将是
Pp = Tp + Tv * t
其中Pp是预测位置,Tp是当前目标位置,Tv是目标速度,t是时间。
我也知道t = | Pp - Sp | / Bs
其中Sp是我的(源)位置,Fs是弹丸(子弹)速度。但我无法找到解决这个问题的方法来获得Pp或t。
任何人都可以开导我吗?感谢
我找到了一个详细介绍一种方法的网站,但这似乎不起作用(http://howlingmoonsoftware.com/wordpress/leading-a-target/)。我确定它是否有效的验证方法是使用预测位置来确定目标到达目标的时间,以及射弹到达目标的时间。这些应该非常相似,但在我的游戏中它们几乎是2倍。
答案 0 :(得分:0)
我设法使用余弦规则和二次方程式解决这个问题,同时在线找到另一个解决方案。
基于余弦规则
c ^ 2 = a ^ 2 + b ^ 2 -2ab.cos(C)
我们知道角度C,因为它是目标方向与我们与目标的相对位置之间的角度
我们知道b,因为它是我们与目标之间的距离
我们知道时间*目标速度
我们知道c是时间*抛射速度
这减少了得到二次
(projspeed ^ 2 - targetvelocity ^ 2)* t ^ 2 + 2 * targetvelocity * distancefromtarget * cos(C)* t - distance fromtarget ^ 2 = 0
这可以使用二次交替形式来解决:
t = 2c /( - b + sqrt(b ^ 2 -4ac))
一旦我们得到t,我们可以使用PredictionPos = TargetPos + t * TargetVelocity
为了验证结果是否正确,我们可以计算出目标到达目的地的时间和到达目的地的射弹 - 这些应该是相等的
答案 1 :(得分:0)
我认为二次方程实际上是t =( - b±sqrt(b ^ 2 - 4ac))/ 2a。 我会将此作为评论添加,但我缺乏必要的声誉。