Skip to content

Lecture 22: Amination Continued

Simple Particle Simulation

ODE

常微分方程(Ordinary Differential Equation, ODE)是未知函数是一个变量的函数的方程。我们可以用ODE来描述粒子的运动。

\[ \frac{dx}{dt} = \mathbf{v}_i = v(x, t) \]

Euler Method

Euler方法是数值求解ODE的一种简单方法。它通过在每个时间步长上使用当前的速度来更新位置。

\[ x(t + \Delta t) = x(t) + \mathbf{v}(x(t), t) \Delta t \]

但这个办法误差大,稳定性差。(不稳定性表现在一些场景中的误差会随着时间的推移而迅速增大。)

Midpoint Method

Midpoint方法是一种改进的Euler方法。它通过在时间步长的一半处计算速度来更新位置。

\[ x_{mid} = x(t) + \frac{1}{2} \mathbf{v}(x(t), t) \Delta t \\ x(t + \Delta t) = x(t) + \mathbf{v}(x_{mid}, t) \Delta t \]

Adaptive Step Size

自适应步长方法根据误差估计动态调整时间步长。用两个步长计算结果的差异来估计误差,误差小则增大步长,误差大则减小步长。

Implicit Euler Method

隐式Euler方法通过在时间步长的末尾计算速度来更新位置。

但这个方程不好解,一般使用牛顿迭代法(Newton's Method)来求解,但稳定性更好。

其局部截断误差为\(O(h^2)\),全局截断误差为\(O(h)\)。其中,局部截断误差是指在每个时间步长上引入的误差,而全局截断误差是指在整个模拟过程中累积的误差,\(h\)是步长。

Runge-Kutta Methods

Runge-Kutta方法是一类更高阶的数值求解ODE的方法。最常用的是四阶Runge-Kutta方法。

\[ \frac{dy}{dt} = f(t, y), \quad y(t_0) = y_0 \]

RK4的公式如下:

\[ y_{n+1} = y_n + \frac{1}{6}(k_1 + 2k_2 + 2k_3 + k_4) h\\ t_{n+1} = t_n + h \]

Position Based/Verlet Integration

Position Based Dynamics (PBD) 是一种用于模拟物理系统的数值方法,特别适用于处理约束条件。PBD 直接在位置空间中工作,通过迭代调整粒子的位置以满足约束条件,而不是通过计算力和加速度来更新速度和位置。

Rigid Body Simulation

刚体是指在受力作用下形状和大小保持不变的物体。模拟刚体和模拟单个粒子类似,但要考虑更多的属性,如旋转。

Fluid Simulation

流体模拟可以使用粒子系统来实现。每个粒子代表流体的一部分,粒子之间的相互作用模拟流体的行为。可以使用简单的PBD方法来模拟流体的运动,并使用梯度下降法来更新粒子的位置。

Eulerian vs Lagrangian

  • Eulerian方法:在固定的空间网格上描述流体的属性,如速度和压力。适用于大规模流体模拟,但处理复杂边界时较困难。
  • Lagrangian方法:跟踪流体中的个别粒子,描述它们的位置和速度。适用于处理复杂边界和自由表面,但计算量较大。

以及有混合方法,结合了两者的优点。