计算垂直射击的速度

时间:2014-10-15 03:43:06

标签: math language-agnostic physics game-physics

我有以下代码

const gravity = 3

y += (gravity / 2 + velocity);
velocity += gravity;

计算受重力影响的物体的自由落体。如果我将速度更改为负值,velocity = -100对象会被抛出,并在一段时间后平稳地开始下降。

我可以做到,而且效果很好。但我需要计算Y达到某个目标所需的速度,此时速度将为0.我不想手动改变速度,但我想改变目标;应该计算速度。例如,我应该调用的函数。

function hitTarget(y) {
    velocity = /* some math here */
}
// this would set velocity to -50 (in an example) after some calculations I can't figure out
hitTarget(10);

然后Y值将是(例如):

100 // velocity starts at -50
50
35
22
17
12
10 // reached target! begins to descend. at this point velocity is 0.
12
17
22
35
50
100 // velocity is 50 and keeps increasing....
...

我使用Projectile Motion公式成功完成了此操作:

y = velocity_y * time - (gravity * time * time) / 2;

但是我无法设置绝对Y,因为速度可以随时由外部因素(在这种情况下输入)改变。此外,由于目前的公式略有不同,我得到了不同的动作。

说明

  • 仅Y轴,无需水平移动
  • -Y上升,+ Y下降。

1 个答案:

答案 0 :(得分:1)

为了计算正确的初始速度,您必须知道目标高度和初始高度之间的差异(即您想要走多远),而不仅仅是目标。所以你有三个选择,你可以将两个参数传递给hitTarget,你可以将初始y设置为hitTarget可用的常量,或者你可以传递一个参数,差异(即y 最终 -y <子>初始)。我会以第三种方式做到这一点;转换到另外两个中的一个是微不足道的。

function hitTarget(y) {
  velocity = -sqrt(-2 * g * y);  // remember that y<=0 (or there's no solution)
}