编程弹道学。想知道这个dy计算

时间:2013-10-29 03:43:49

标签: javascript physics

大家好,所以我正在学习HTML5和JS,并制作一些游戏和内容。我正在阅读HTML5基本指南一书,其中描述了一个弹道类型的程序,其中位移y将是:

verticalVel2 = verticalVel1 + gravity;
dy = (verticalVal2 + verticalVel1) * .5;

我没有得到的是为什么他们取平均速度。 为什么不将速度设置为速度减去重力,然后将其应用到当前位置?

3 个答案:

答案 0 :(得分:1)

可能模仿空气厚度造成的减速。

这个例子非常适合尼克,他想知道为什么t不存在于等式中。

var x = 0, y = 0, dx = 5, dy = 5
for (var t = 0; t < 150; t++) {
    x += dx, y += dy
    if (y < 0) break
    dx -= 0.1
    dy -= 0.5
    setPixel(x, y)
}

或者这是基于计时器的变体

var x = 0, y = 0, dx = 5, dy = 5
var T = setInterval(function() {
    x += dx, y += dy
    if (y < 0) clearInterval(T)
    dx -= 0.1
    dy -= 0.5
    setPixel(x, y)
}, 500) 

答案 1 :(得分:0)

子弹的y位移或类似的y=Vi*t+1/2*a*t^2。通常,您将向上运动定义为正向并向下运动为负向运动。 a是在标准自由落体情况下的加速度,例如水平射击,你会想要使用重力作为加速度,g的值为9.8 m/s^232 ft/s^2。重要的是要记住,通常取决于您的坐标系,重力是负加速度。

所有这一切都假设恒定力作用于物体,因此加速度是恒定的。至于为什么他们选择平均我不能说的两件事。我很困惑速度如何在没有时间的情况下为你提供位移。此外,您的意思是verticalV e l1或verticalV a l1。如果你的意思是verticalVal那么我不确定那应该告诉我们什么。如果您将verticalVel视为垂直速度,那么请使用之前给出的等式。如果您有任何与物理相关的问题,我可以尝试为您详细说明或回答它们。

答案 2 :(得分:0)

如果在第二个表达式中用verticalVel2替换表达式,最后会得到:

dy = verticalVel1 + gravity * .5;

如果代码中的某个地方有y += dy;并且Velocity Verlet integration scheme(或类似的)具有单位时间步长(即delta_t = 1)用于求解方程式,则这是有意义的运动。