弹簧的问题之一:
弯曲问题——弯曲弹簧的问题,若是两个三角面几乎为平面的时候,略微的弯曲只会造成弯曲弹簧的很小量很小量变化,造成的结果是对弯曲抵抗很弱
解决的方法:使用角弹簧,二面角方法,将弯曲的力写为一个函数f_i=f(θ)u_i
其中f(θ)告诉了我们弯曲力的大小,u_i则决定了弯曲力的方向
将弯曲力的问题分为了两个步骤,分别是力的方向和大小,
对于力的方向基于此有三个假设:
1.u1和u2在法向的方向上,
2.弯曲不会让X3X4这一条边发生形变,基于此u3,u4方向上的力差值为0,因此u4-u3要垂直于这条边,所以可以得出u4和u3可以由两个法线向量线性组合构成
3.最终的合力为0,因为所有弯曲的力为合力,u1+u2+u3+u4 = 0,说明u3和u4也是由两个法线向量线性组合构成(因为以此可以得出u3+u4是两个法向量的线性组合,u3-u4也是两个法向量的线性组合,所以u3和u4分别是两个法向量的线性组合)
假设的方法是这些,最终可以退出一些结论(推导过程省略)
这里的N并不是法向量,只是做了一个叉乘,得出了方向,并没有单位化,至此我们得出了弯曲力的方向
力的大小可以分为平面情况:
非平面的情况:(也就是模型在初始条件下有一个初始角度θ0)
未做详细的推导,公式来自于斯坦福大学2003年的论文Bridson et al. 2003. Simulation of Clothing with Folds and Wrinkles. SCA.
这个模型使用的是显式积分,完全基于力的实现,没有用到能量,直观但是计算比较复杂
第二种弯曲问题解决方法,基于能量和拉普拉斯变换
有两个假设,模型为平面,模拟的时候三角形拉伸很小,几何没有什么形变
最后会得出能量E(x)=3‖q^Tx‖^2/2(A_0+A_1),这种方法是用了拉普拉斯估算了三角形之间的曲率q^Tx,曲率越大,弯曲也越大(省略了数学推导过程,原论文中也没有...)
Bergou et al. 2006. A Quadratic Bending Model for Inextensible Surfaces. SCA.
优点是这个力和H矩阵很好计算,在做隐式积分的时候很方便
缺点是如果物体拉伸的比较厉害,曲率的计算就不太合理,
若是不平的话,有一些其他的方法,后面会涉及(projective dynamics)
锁死问题(自由度的丢失),约束越多,自由度会有影响
在做假设的时候,我们将平面和弯曲的问题都是分开来实行的,假设两者相互独立,但事实是这样会产生一个锁死问题
根据经典的欧拉定律,自由度为3+边界边(边缘上的边),(边=3*顶点-3-边界边,自由度= 变量-边,变量= 3*顶点)会造成自由度不够,边界上的边比较少,弹簧弹性很弱网格分辨率很低的时候,问题很明显
理论上弯曲和弹簧的K应该无关,但由于我们采取的这个弹簧系统模型导致了这个本质上的问题,弹簧系数影响了弯曲的进行,将k减小可以在视觉上解决这个问题,但问题始终存在