测验:积分器与稳定性
用显式欧拉模拟弹簧(a = -x),每一步能量如何变化?
- 随机波动但平均不变
- 精确增为 (1 + dt²) 倍
- 精确降为 (1 - dt²) 倍
- 与 dt 无关且恒定
半隐式(辛)欧拉与显式欧拉有何不同?
- 每步计算两次加速度
- 通过解方程求下一位置
- 先更新速度,再用新速度更新位置
- 按误差自动缩小时间步
物理引擎为何不用渲染帧时间直接作为 dt,而以固定 dt 执行多步?
- 固定 dt 更快
- dt 变大时物体会穿墙或约束发散
- 只有固定 dt 的浮点舍入准确
- 渲染和物理不能同线程
速度 Verlet 相比半隐式欧拉的优势和代价是什么?
- 精度高一阶,但每步多一次力计算
- 精确保能,但内存翻倍
- 碰撞更容易,但不能阻尼
- 可任意增大 dt,但实现复杂
每步用 v *= 0.99 加阻尼,有什么问题?
- 速度永不为零,物体永久滑动
- 阻尼量随 dt 改变,不同帧率机器运动不同
- 能量反而增加
- 只作用于大质量物体
把 dt 从 0.05 增至 0.2(四倍),显式欧拉在 20 秒后的能量增长率大约如何变化?
- 约四倍
- 几乎相同
- 从 2.7 倍跳到 50 倍
- 反而降低