达到速度所需的加速度(每个时间步长)

时间:2015-08-10 09:35:47

标签: math game-physics

我的对象从v0( 0m.s ^ -1 )开始,需要达到距离为vf( 10m.s ^ -1 )假设 25米

Acceleration required?

此对象使用以下运动方程更新其速度:

    v(n) = v(n - 1) + a * dt

dt是自上一帧以来的时间间隔(最后一次计算速度)。并且n是当前帧索引。

我知道为了达到最终速度vf并从v0开始,加速度的公式是:

a = (vf * vf - v0 * v0) / (2 * d)

d为距离(在我们的例子中为25m)。

但是我不能在运动方程中使用这种加速度,事实上我试过但是我得不到正确的速度。所以我想这是因为加速度不适合每一步都使用。

那么你知道检索我可以在运动方程中使用的加速度的正确公式吗?

1 个答案:

答案 0 :(得分:1)

你的公式适用于直接的跳跃式青蛙:

var dt = 1.0 / 30;
var dp0 = 0, dp1 = 10;
var p0 = 0, p1 = 25;
var ddp = (dp1 * dp1 - dp0 * dp0) / (2 * (p1 - p0));
var list = document.getElementById("list");
for(var i = 0, p = p0, dp = dp0; p < p1; ++i) {
  // ddp = (dp1 * dp1 - dp * dp) / (2 * (p1 - p));
  p += dp * dt;
  dp += ddp * dt;
  var str = "";
  str += " p: " + Math.floor(p * 1000) / 1000;
  str += ", dp: " + Math.floor(dp * 1000) / 1000;
  str += ", ddp: " + Math.floor(ddp * 1000) / 1000;
  var text = document.createTextNode(str);
  var node = document.createElement("li");
  node.appendChild(text);
  list.appendChild(node);
}
<ol id="list"></ol>