初步的想法收到Example-Based Elastic Materials的启发,利用场给每个节点施加额外的力。
但是这样会导致一个问题。
原来的优化模型中,弹力、惯性力都是保守力,也就是说,这些力做功与路径无关,于是它们各自对应一个能量。弹力对应的是弹性势能,惯性力也有对应的能量形式。整个算法框架就是力图最小化这个能量。
现在引入场之后,并不保证引入的场是保守的,例如阻尼场就并不是保守的。于是,整个系统的能量不能简单写成位置的函数,而是包含对路径的积分。
引入场之后某时刻系统总能量增量
dE = (fe + fi + ff + fc) * dx
其中fe是弹力,fi是惯性力,ff是场力,fc是约束反力
fc * dx = 0 ,假定约束为理想约束
fe * dx = dWe = We(x1) - We(x0),给定本构模型,弹性势能We便有封闭形式
fi * dx = -ma * dx
ff * dx = dWf 但是不能写成 Wf(x1) - Wf(x0)的形式,因为场不一定能够写成势能形式
但是,dWf = 总是可以通过ff * dx求得。
从另一个角度看,虽然就某个场的定义形式来看,其未必是保守的;但是,我认为, 对于具体的某一时刻的运动,可以用一个保守场去等效。例如对于在阻尼场中运动的一个粒子,其t时刻的受力便取决于此时它的速度,速度一旦给定,力便随之给定。阻尼力在此时做的功dWf = ff * dx 便与一个方向与此相同的均匀力场(力处处相同)一样。于是,可以用此力场替代之。