今天改正了一个小问题
当能量函数对某个参数的梯度为0时,直接把这个参数的增量设为0。因为说明这个参数无论怎么变化都不可能影响能量函数。
当解出参数增量不为有限值时,也把增量设为0。
把增量设为0也就是保持参数与上一帧一样。
当前发现的一个严重问题是,当Hessian不为正定时,模拟常常会出错。具体的表现是,参数突然变化很多,或求不出参数有限的增量(无效的浮点值)。
牵涉到旋转的情形比较容易出现这种情况。这时候多种参数往往会对应1个形状。例如,弯曲为0时,无论弯曲轴旋转到哪里,形状都是未弯曲的形状。
暂时没想到有效的解决方法。只能用以上粗糙的方法代替。
另一个问题是,牵涉到骨骼动画的模拟,有时候姿态会突变。我怀疑是由于内力过大造成的。