-1

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

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

我不明白为什么他们取平均速度。为什么不将速度设置为速度减去重力,然后将其应用于当前位置?

4

3 回答 3

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) 
于 2013-10-29T03:51:33.313 回答
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 的意思与垂直速度相同,那么请不要使用前面给出的等式。如果您还有更多与物理相关的问题,我可以尝试为您详细说明或回答其中任何一个问题。

于 2013-10-29T04:24:55.940 回答
0

如果verticalVel2将第二个表达式中的表达式替换为,您最终会得到:

dy = verticalVel1 + gravity * .5;

如果在代码的后面某处存在y += dy;并且使用单位时间步长(即 delta_t = 1)的Velocity Verlet 积分方案(或类似方案)来求解运动方程,则这是有道理的。

于 2013-10-29T09:18:19.900 回答