达到速度所需的加速度(每个时间步长)
Acceleration (per time step) required to reach speed
我有一个对象从 v0 (0m.s^-1) 开始,需要达到 vf (10m.s ^-1) 比方说 25m.
此对象使用以下运动方程更新其速度:
v(n) = v(n - 1) + a * dt
dt 是自上一帧(最后一次速度计算)以来的时间间隔。 n 是当前帧索引。
我知道为了达到最终速度 vf 并从 v0 开始,加速度的公式是:
a = (vf * vf - v0 * v0) / (2 * d)
d 为距离(在我们的示例中为 25m)。
但是我不能在我的运动方程中使用这个加速度,事实上我试过了但我没有得到正确的速度。所以我猜是因为加速度不适合每个时间步使用。
那么你知道我可以在我的运动方程中使用的检索加速度的正确公式吗?
你的公式适用于直接的蛙跳:
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>
我有一个对象从 v0 (0m.s^-1) 开始,需要达到 vf (10m.s ^-1) 比方说 25m.
此对象使用以下运动方程更新其速度:
v(n) = v(n - 1) + a * dt
dt 是自上一帧(最后一次速度计算)以来的时间间隔。 n 是当前帧索引。
我知道为了达到最终速度 vf 并从 v0 开始,加速度的公式是:
a = (vf * vf - v0 * v0) / (2 * d)
d 为距离(在我们的示例中为 25m)。
但是我不能在我的运动方程中使用这个加速度,事实上我试过了但我没有得到正确的速度。所以我猜是因为加速度不适合每个时间步使用。
那么你知道我可以在我的运动方程中使用的检索加速度的正确公式吗?
你的公式适用于直接的蛙跳:
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>