图形学笔记(十九)粒子、刚体、流体的模拟—— 欧拉方法、Errors 和 Instability、中点法、自适应步长、隐式欧拉方法、Runge-Kutta方法、刚体与流体模拟(质点法、网格法、MPM)
结束
1 Single Particle Simulation 单个粒子模拟
1.1 单个粒子的运动
首先研究一个粒子的运动然后泛化到大多数粒子。
我们线认为粒子的运动由速度场(velocity vector field)决定,这个速度场就是一个位置和时间的函数:
v ( x , t ) v(x,t) v(x,t)
计算粒子的位置(随时间变化)需要解一个一阶的常微分方程(不存在对其他变量的微分或导数First-order意味着只存在一阶导数),
d x d t = x ˙ = v ( x , t ) \frac{dx}{dt}=\dot{x}=v(x,t) dtdx=x˙=v(x,t)
1.2 Euler’s Method 欧拉方法
可以使用欧拉方法对给定初始位置和速度场的点求解经过时间t后所处的位置。
特点 欧拉方法是一种简单的迭代方法,经常被使用、不准确、大多数都不稳定。
x t + Δ t = x t + Δ t x ˙ t x ˙ t + Δ t = x ˙ t + Δ t x ¨ t x^{t+\Delta t}=x^t+\Delta t\dot{x}^t \newline \dot{x}^{t+\Delta t}= \dot x^t+\Delta t\ddot{x}^t xt+Δt=xt+Δtx˙tx˙t+Δt=x˙t+Δtx¨t
1.2.1 欧拉方法的errors(误差)
使用数值计算的方法积分,errors会累计,最后的Euler积分结果会很差。
如下所示,但是 Δ t \Delta t Δt越大,误差越大。
1.2.2 欧拉方法的instability(不稳定性)
显式/正向欧拉方法:
x t + Δ t = x t + Δ t v ( x , t ) x^{t+\Delta t}=x^t+\Delta t v(x,t) xt+Δt=xt+Δtv(x,t)
如下图,粒子的轨迹始终不能沿着圆形或指定的轨迹。
即欧拉方法有两个关键的问题:
- 误差随着时间步长 Δ t \Delta t Δt 的增加而增加。
- 不稳定性是一个普遍且严重的问题,它能造成模拟diverge。
1.2.3 Errors 和 Instability
通过数值积分求解会导致两个问题:Errors和Instability。
每一步的errors会累计,随着模拟的进行,accuracy会下降,但是可以增大步长来环节这个问题,所以误差errors在图形应用中不是关键问题。
instability会导致diverge(不管怎么模拟都可能和正确的结果相差较远),缺乏稳定性是仿真中的基本问题,不容忽视
1.3 克服不稳定性的方法
1.3.1 Midpoint Method 中点法
- 使用欧拉方法计算,点到达A( a )。
- 使用欧拉方法计算上一步起始点与A点的导数( b )。
- 使用中点的导数来重新更新位置( c )。
上面的过程对应下面的式子如下
x m i d = x ( t ) + Δ t / 2 ⋅ v ( x ( t ) , t ) x t + Δ t = x ( t ) + Δ t ⋅ v ( x m i d , t ) x_{mid}=x(t)+\Delta t/2 \cdot v(x(t),t) \newline x_{t+\Delta t}=x(t)+\Delta t \cdot v(x_{mid},t) xmid=x(t)+Δt/2⋅v(x(t),t)xt+Δt=x(t)+Δt⋅v(xmid,t)
中点法比欧拉方法多了一个二次的项。
x t + Δ t = x t + Δ t x ˙ t + ( Δ t ) 2 2 x ¨ t x^{t+\Delta t}=x^t+\Delta t \dot x^t+ \frac{(\Delta t)^2}{2}\ddot x^t xt+Δt=xt+Δtx˙t+2(Δt)2x¨t
1.3.2 Adaptive Step Size 自适应步长法
方法
- 使用步长为T计算一个欧拉步骤来获得 x T x_T xT。
- 计算两个欧拉步骤,步长为T/2,获得 x T / 2 x_{T/2} xT/2。
- 计算error ∣ ∣ x T − x T / 2 ∣ ∣ ||x_T – x_{T/2}|| ∣∣xT−xT/2∣∣。
- If(error > threshold)减少步长并重复上面的步骤。
Adaptive是基于error估计选择步长的方法,非常实用,但可能得到的步长会很小。
1.3.3 Implicit Eurler Method 隐式欧拉方法
也被称作后向方法,使用下一时间的导数来计算当前的步骤。
x t + Δ t = x t + Δ t x ˙ t + Δ t x ˙ t + Δ t = x ˙ t + Δ t x ¨ t + Δ t x^{t+\Delta t}=x^t+\Delta t\dot{x}^{t+\Delta t} \newline \dot{x}^{t+\Delta t}= \dot x^t+\Delta t\ddot{x}^{t+\Delta t} xt+Δt=xt+Δtx˙t+Δtx˙t+Δt=x˙t+Δtx¨t+Δt
求解非线性的 x t + Δ t 、 x ˙ t + Δ t x^{t+\Delta t}、\dot{x}^{t+\Delta t} xt+Δt、x˙t+Δt较为困难,可以认为在这个时刻位置知道且已知下一个时刻的加速度,使用求根公式来求解。也可以使用优化方法来解出来。
定义与量化”stability”的方法
-
使用局部截断误差(每个 Δ \Delta Δ的误差)/ 总截断累积误差(整体累加后的误差)来研究稳定性。
-
研究数的大小无意义,有意义的事研究它们的阶。
-
隐式欧拉方法的阶数为1,意味着局部截断误差为 O ( h 2 ) O(h^2) O(h2)且全局阶段误差为 O ( h ) O(h) O(h)(h就是步长,定义为 Δ t \Delta t Δt)。
O(h)的理解:如果将 h 减半,预期误差也会减半。
1.3.4 Runge-Kutta Families
Runge-Kutta方法是一系列用于求解 ODE 的高级方法。
特点
- 擅长处理非线性问题。
- 它的四阶版是使用最广泛的,又名 RK4。
如下所示,h就是步长,这个方法相当于推广的中点法。
1.3.5 Position-Based / Verlet Integration
这是一种不基于物理的方法,通过调整物体的位置使物体满足某种性质。
主要思想
- 在修改欧拉前步(forward-step)之后,约束粒子的位置以防止divergent、不稳定的现象。
- 使用约束位置计算速度。
- 这两种思想都会耗散能量,使其具有稳定性。
特点 快速又简单,不是基于物理模拟的,不满足能量守恒。
2 Rigid Body Simulation 刚体模拟
刚体模拟与模拟单个粒子相似,只需额外考虑一些属性,如下所示。
3 Fluid Simulation 流体模拟
3.1 简单的基于位置的流体模拟方法
关键思想
- 认为水是由刚体小球组成的。
- 认为水是不可压缩的。
- 只要某处的密度海绵,就需要通过改变粒子的位置来“纠正”。
- 需要知道任何位置的密度的梯度。
- 使用梯度下降法来进行更新。
3.2 Lagrangian vs Eulerian 质点法与网格法
Lagrangian质点法:摄影师全程跟踪同一只鸟。
Eulerian网格法:摄影师是静止的,只能拍摄经过一帧的所有鸟(比如在时间“t”)。
3.3 Material Point Method(MPM)
MPM是一种混合的(Hybrid),结合Eulerian和Lagrangian的方法。
- Lagrangian:认为粒子带有材质属性。
- Eulerian:使用网格来做数值积分。
- lnteraction:粒子将属性传递给网格,网格执行更新,然后插值回粒子。
今天的文章物质的微观粒子模型_流体力学欧拉法例题[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/82235.html