我有以下代码
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,因为速度可以随时由外部因素(在这种情况下输入)改变。此外,由于目前的公式略有不同,我得到了不同的动作。
说明
答案 0 :(得分:1)
为了计算正确的初始速度,您必须知道目标高度和初始高度之间的差异(即您想要走多远),而不仅仅是目标。所以你有三个选择,你可以将两个参数传递给hitTarget
,你可以将初始y设置为hitTarget
可用的常量,或者你可以传递一个参数,差异(即y 最终子> -y <子>初始子>)。我会以第三种方式做到这一点;转换到另外两个中的一个是微不足道的。
function hitTarget(y) {
velocity = -sqrt(-2 * g * y); // remember that y<=0 (or there's no solution)
}