Lecture 22: Amination Continued¶
Simple Particle Simulation¶
ODE¶
常微分方程(Ordinary Differential Equation, ODE)是未知函数是一个变量的函数的方程。我们可以用ODE来描述粒子的运动。
Euler Method¶
Euler方法是数值求解ODE的一种简单方法。它通过在每个时间步长上使用当前的速度来更新位置。
但这个办法误差大,稳定性差。(不稳定性表现在一些场景中的误差会随着时间的推移而迅速增大。)
Midpoint Method¶
Midpoint方法是一种改进的Euler方法。它通过在时间步长的一半处计算速度来更新位置。
Adaptive Step Size¶
自适应步长方法根据误差估计动态调整时间步长。用两个步长计算结果的差异来估计误差,误差小则增大步长,误差大则减小步长。
Implicit Euler Method¶
隐式Euler方法通过在时间步长的末尾计算速度来更新位置。
但这个方程不好解,一般使用牛顿迭代法(Newton's Method)来求解,但稳定性更好。
其局部截断误差为\(O(h^2)\),全局截断误差为\(O(h)\)。其中,局部截断误差是指在每个时间步长上引入的误差,而全局截断误差是指在整个模拟过程中累积的误差,\(h\)是步长。
Runge-Kutta Methods¶
Runge-Kutta方法是一类更高阶的数值求解ODE的方法。最常用的是四阶Runge-Kutta方法。
RK4的公式如下:
Position Based/Verlet Integration¶
Position Based Dynamics (PBD) 是一种用于模拟物理系统的数值方法,特别适用于处理约束条件。PBD 直接在位置空间中工作,通过迭代调整粒子的位置以满足约束条件,而不是通过计算力和加速度来更新速度和位置。
Rigid Body Simulation¶
刚体是指在受力作用下形状和大小保持不变的物体。模拟刚体和模拟单个粒子类似,但要考虑更多的属性,如旋转。
Fluid Simulation¶
流体模拟可以使用粒子系统来实现。每个粒子代表流体的一部分,粒子之间的相互作用模拟流体的行为。可以使用简单的PBD方法来模拟流体的运动,并使用梯度下降法来更新粒子的位置。
Eulerian vs Lagrangian¶
- Eulerian方法:在固定的空间网格上描述流体的属性,如速度和压力。适用于大规模流体模拟,但处理复杂边界时较困难。
- Lagrangian方法:跟踪流体中的个别粒子,描述它们的位置和速度。适用于处理复杂边界和自由表面,但计算量较大。
以及有混合方法,结合了两者的优点。