
物理学与动画
•文大升
physicsanimation
我们如何定义物体的运动?一种方法是通过运动方程来表达。
F = ma
是一个著名的公式。力会使物体产生加速运动。
在弹簧运动中,力与到平衡点的距离成正比。即 F = -kx
。力在位移的相反方向产生,弹性系数越大,拉力越强。
在现实物理世界中,我们还必须考虑弹簧运动中的空气阻力。通常,空气阻力随速度增大而向相反方向作用。
空气阻力是通过与空气中无数粒子的碰撞产生的。想象一下,我们与粒子碰撞得越猛烈,粒子飞得越快。反过来说,粒子飞得越快,我们就从粒子那里失去越多的动量。这就是为什么空气阻力会随着我们的速度增加而增大。
因此最终的力变为 F = -kx-bv
。将其与牛顿运动方程联系起来,得到 F = ma = -kx-bv
,其中 a、v、x 都是与 x 相关的变量。(v 是 x 相对于时间的变化率,a 是 v 相对于时间的变化率)
我们可以用微分方程来表达这个关系。所有的微分方程都可以通过数值分析来求解。想象一下物体在短时间内做匀速运动。
- 在 dt 时间内,物体移动 v * dt 的距离。
- 在 dt 时间内,速度变化 a * dt。
- 加速度由当前的距离和速度决定。
通过累积计算短时间间隔内变化的 x、v、a,我们可以描述物体随时间的运动。
现实世界中的所有物体都在连续的速度和连续的加速度之间运动。想象一下物体在运动时突然改变方向。当向右拉物体的力现在改为向左时,物体不会立即向左移动。向右的速度会逐渐减小到零,然后才向左移动。
这就是 CSS 动画和弹簧动画之间的区别所在。CSS 会突然改变方向。弹簧则在连续改变速度的同时转换方向。后者更接近现实。这就是 ssgoi 追求弹簧动画的原因。