大家好,所以我正在学习HTML5和JS,并制作一些游戏和内容。我正在阅读HTML5基本指南一书,其中描述了一个弹道类型的程序,其中位移y将是:
verticalVel2 = verticalVel1 + gravity;
dy = (verticalVal2 + verticalVel1) * .5;
我没有得到的是为什么他们取平均速度。 为什么不将速度设置为速度减去重力,然后将其应用到当前位置?
答案 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^2
或32 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)用于求解方程式,则这是有意义的运动。