如何在一定时间(例如 1 秒)后计算加速体(例如汽车)的位置?
对于一个不加速的运动体,它是线性关系,所以我假设对于一个加速体,它在某处包含一个正方形。
有任何想法吗?
等式是:s = ut + (1/2)at^2
其中 s 是位置,u 是 t=0 时的速度,t 是时间,a 是恒定加速度。
例如,如果一辆车从静止开始,以 3m/s^2 的加速度加速两秒钟,它移动 (1/2) * 3 * 2^2 = 6m
这个方程来自对方程的分析积分,这些方程表明速度是位置的变化率,加速度是速度的变化率。
通常在游戏编程情况下,人们会使用稍微不同的公式:在每一帧,速度和位置的变量不是解析地积分,而是数值积分:
s = s + u * dt;
u = u + a * dt;
其中 dt 是帧的长度(使用计时器测量:1/60 秒左右)。这种方法的优点是加速度可以随时间变化。
编辑有几个人注意到,数值积分的欧拉方法(如图所示)虽然是最简单的演示方法,但精度却相当差。请参阅Velocity Verlet(经常在游戏中使用)和4 阶 Runge Kutta(科学应用的“标准”方法)以了解改进的算法。
嗯,这取决于加速度是否恒定。如果是的话,那就简单了
s = ut+1/2 at^2
如果 a 不是常数,则需要进行数值积分。现在有很多种方法,但没有一种方法能比手工更准确,因为它们最终都是近似解。
最简单和最不准确的是欧拉方法。在这里,您将时间划分为称为时间步长的离散块,并执行
v[n] = v[n-1] * t * a[t]
n
是索引,t
是时间步长的大小。位置也同样更新。这仅适用于准确性并不那么重要的情况。Euler 方法的一个特殊版本将为弹丸运动产生一个精确的解决方案(参见 wiki),因此虽然这种方法很粗糙,但它对于某些情况来说可能是完美的。
游戏和某些化学模拟中最常用的数值积分方法是Velocity Verlet,它是更通用的 Verlet 方法的一种特殊形式。如果欧拉太粗糙,我会推荐这个。
你可以谷歌一下。我发现了这个:http ://www.ugrad.math.ubc.ca/coursedoc/math101/notes/applications/velocity.html
但如果你不想阅读,那就是:
p(t) = x(0) + v(0)*t + (1/2) a t^2
在哪里
假设您正在处理恒定加速度,则公式为:
距离 = (initial_velocity * time) + (acceleration * time * time) / 2
在哪里
distance是经过的距离
initial_velocity是初始速度(如果身体最初处于静止状态,则为零,因此在这种情况下您可以删除该术语)
时间就是时间
加速度是(恒定的)加速度
计算时请确保使用正确的单位,例如米、秒等。
关于该主题的一本非常好的书是面向游戏开发者的物理。
假设恒定加速度和初速度 v0,
x(t) = (1/2 * a * t^2) + (v0 * t)