好吧,我知道这对于程序员来说是非常离题的,但我仍然需要这个应用程序,所以这里是:
弹道曲线(无风或任何其他条件)由以下两条线指定:
所以,有一个问题是您得到了 3 个未知值:x、y 和时间 t,但只有 2 个方程。 你不能只用这些值来计算所有 3 个值,我得到了:
- 速度v
- 角度阿尔法
- 原点坐标
因此,您必须决定指定哪一个。
现在你有了 2D 坦克游戏,或者类似的东西,你知道你有坦克,并且使用弹道你必须用设定的角度和力量击落对手。
我需要知道子弹何时击中地面,它可以是在飞行时进行的,也可以是预先计算的。 我的问题出现了。使用哪种方式?预先计算或检查每一步是否落地。
如果我想预先计算,我需要知道地形的高度,这在逻辑上必须是恒定的,因为我不知道哪个 x 坐标。如果我知道 X,那就意味着我的炮塔前面就是墙。因此,当我撞到地面时,获得结果的唯一方法是检查撞到地面的时间间隔。这也很好,因为地形没有顶部是静态的耶!但这不是太大的开销,可以变得更简单吗?您遇到过这样的问题/解决方案吗?
在此先感谢,顺便说一句,地形可以是平坦的,使用线条或 NURBS,所以我请您提供一般解决方案,而不是具体到您在哪个高度拍摄会受到影响。
最佳答案
您可以通过求解一个方程为 t
并代入另一个方程来计算弹丸 y(x)
的路径。你得到
然后找到着陆点就是计算该函数与定义地形高度的函数之间的交点。一个交叉点将是发射点,另一个将是着陆点。 (如果您的地形非常陡峭和丘陵,可能有超过 2 个交叉点,在这种情况下,您选择第一个 x
大于发射点的交叉点。)您可以使用各种 root-finding algorithms 中的任何一个来实际计算交集;检查任何数学或游戏物理库的文档,看看它们是否提供了执行此操作的方法。
关于c++ - 弹道曲线问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3215817/