c++ - 弹道曲线问题

标签 c++ physics

好吧,我知道这对于程序员来说是非常离题的,但我仍然需要这个应用程序,所以这里是:

弹道曲线(无风或任何其他条件)由以下两条线指定:

x coordinate

y coordinate

所以,有一个问题是您得到了 3 个未知值:x、y 和时间 t,但只有 2 个方程。 你不能只用这些值来计算所有 3 个值,我得到了:

  • 速度v
  • 角度阿尔法
  • 原点坐标

因此,您必须决定指定哪一个。

现在你有了 2D 坦克游戏,或者类似的东西,你知道你有坦克,并且使用弹道你必须用设定的角度和力量击落对手。

我需要知道子弹何时击中地面,它可以是在飞行时进行的,也可以是预先计算的。 我的问题出现了。使用哪种方式?预先计算或检查每一步是否落地。

如果我想预先计算,我需要知道地形的高度,这在逻辑上必须是恒定的,因为我不知道哪个 x 坐标。如果我知道 X,那就意味着我的炮塔前面就是墙。因此,当我撞到地面时,获得结果的唯一方法是检查撞到地面的时间间隔。这也很好,因为地形没有顶部是静态的耶!但这不是太大的开销,可以变得更简单吗?您遇到过这样的问题/解决方案吗?

在此先感谢,顺便说一句,地形可以是平坦的,使用线条或 NURBS,所以我请您提供一般解决方案,而不是具体到您在哪个高度拍摄会受到影响。

最佳答案

您可以通过求解一个方程为 t 并代入另一个方程来计算弹丸 y(x) 的路径。你得到

y = x tan(theta) - x^2g/2(v cos(theta))^2

然后找到着陆点就是计算该函数与定义地形高度的函数之间的交点。一个交叉点将是发射点,另一个将是着陆点。 (如果您的地形非常陡峭和丘陵,可能有超过 2 个交叉点,在这种情况下,您选择第一个 x 大于发射点的交叉点。)您可以使用各种 root-finding algorithms 中的任何一个来实际计算交集;检查任何数学或游戏物理库的文档,看看它们是否提供了执行此操作的方法。

关于c++ - 弹道曲线问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3215817/

相关文章:

c++ - Xcode 复制文件构建阶段 - "Destination"选项是什么意思?

c++ - 使用 std::launder 从指向非事件对象的指针获取指向事件对象成员的指针?

c++ - 在 Mac 上的 Ubuntu VM 上使用 Mesa/OpenGL 4.5 进行软件渲染

math - 数学/物理负责人的最近方法问题

3d - XNA 3d 物理引擎

python - 有没有办法在 Python 中定义 float 组?

c++ - 如何循环遍历 vector 并调用通用覆盖函数?

c++ - 在两个函数中使用相同的变量

javascript - Canvas 圆圈碰撞,如何计算出碰撞后圆圈应该移动到哪里?

python 球物理模拟