MIT 6.837:Mass-Spring 质点-弹簧系统

质点-弹簧系统也是一种常用于进行物理模拟的模型,可以通过恰当的建模来模拟绳子、布料等具有一定弹性的物体。
弹力

弹力是一个我们自初中就接触的话题,根据 Hooke 定律,弹簧内部的弹力与形变量成正比,比例系数定义为 $K \ (\mathrm{N/m})$,方向朝形变的反方向,形式化表达为
$$ \boldsymbol{F}(\boldsymbol{P}_i, \boldsymbol{P}_j) = K (L_0 – || \boldsymbol{P}_i\boldsymbol{P}_j ||) \frac{\boldsymbol{P}_i\boldsymbol{P}_j}{|| \boldsymbol{P}_i\boldsymbol{P}_j ||} $$
质点-弹簧系统
结构

对于一些有弹性的物体,我们可以利用弹簧这一模型反映内部的弹力,结合粒子系统的思想,就得到了质点-弹簧系统。系统中包含若干质点,以及将质点连起来的弹簧网络。这一模型可用于模拟绳子、布料、头发等材质。
力分析
在质点-弹簧系统中包含三种力:
- 结构力:反映系统中一些不变参数的力,例如某点的位置固定等,这实际上是一组常量约束
- 内部变形力:当结构变形时,产生的弹力,例如布垂下时向上拉、希望将其变平的力
- 外部力:重力等外界因素对系统产生的力
模型
头发
头发可看做是难以伸长、易于弯曲、弯曲引起弹力的模型。与常规的弹簧不同,对头发的建模应将变形力与弯曲程度关联,可取质点所连线之间的夹角反映弯曲程度。

布料

布料通常利用质点和弹簧织成的网络建模,其中包含多种弹簧:
- 结构弹簧:连接同行同列的相邻质点,将质点连接成一个面
- 剪力弹簧:四边形容易被拉伸变形,布料并不易受剪力变形,因此添加对角相邻的弹簧以抵抗这种变形
- 弯曲弹簧:同行同列隔一个质点连接,用于提供抵抗布料弯曲的力

布料模拟时通常会添加约束,例如规定悬挂布料的位置。悬挂处位置不变,故受力应当为 0,此处的结构力应为该点所受其他力合力的反向,故不为一个确定的力,而随其受其他力的情况变化。实现时,不必计算此力,而可以直接忽略添加了约束的点的受力即可。
布料模拟中也可能会遇到一些问题:
- 弹性问题:布料的形变通常较小,需要合理设置弹簧的弹性系数来避免形变过大,也可限制布料的形变程度
- 离散化问题:离散化得到的质点数会影响模拟结果,因此需要选用恰当的质点数,以得到和现实情况类似的结果
- 碰撞问题:质点数很多时,布料与其他物体的碰撞是一个很棘手的问题,因此需要解决碰撞检测与稳定性问题