我正在尝试实现本文中对骨折建模的思想:http://graphics.berkeley.edu/papers/Obrien-GMA-1999-08/index.html
我被困在一个点(基本上是第4页.)我真的很感激你的帮助。我所坚持的部分涉及四面体的变形(用有限元法)。
我有一个由四个节点(每个节点具有x、y、z位置)定义的单个四面体,其中我从以下矩阵中计算出下列矩阵:
{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}, {0, 0, 0}}。
我得到了x(u) = P*B*u和v(u) = V*B*u,但不知道该在哪里使用这些.
另外,我得到了dx = P*B*delta和dv = V*B*delta
然后由格林应变张量,epsilon = 1/2(dx+transpose(dx)) - Identity_3x3得到应变
然后是压力,sigma = lambda*trace(epsilon)*Identity_3x3 + 2*mu*epsilon
我通过第4页上的方程(24)得到弹性力。只是个大总结。
然后我用显式积分来更新现实世界的坐标P,其思想是速度更新涉及四面体节点上的力,因此影响到现实世界的坐标位置,使物体变形。
但是问题是,力是难以置信的small...something x 10^-19等等,所以,c++通常是0。我已经算过了,也弄不清楚为什么。
我知道我错过了什么,只是不知道是什么。我做错了什么更新?
发布于 2011-11-28 09:06:39
力小的一个常见原因是你的杨氏模量太小。如果使用米的比例尺,则宏比例尺对象可能有10^5的杨氏模型和.3与.4的泊松比。
听起来可能发生的情况是,您的团队仍然处于rest配置中。在没有变形的情况下,应变是零的,所以转动的应力和力也是零。你可以用各种方式扰乱顶点,并确保你的应变(epsilon)被正确计算。一个简单的测试是对质心进行2的测量,这应该会给你一个阳性反应。如果你用.5来衡量质心,你会得到一个负的应变。如果你一致地平移顶点,你就不会得到应变的变化(一个常见的有限元不变量)。如果你转动它们,你可能会得到一个变化,但共旋转本构模型不会。
注意,你可能认为重力会导致变形,但是除非其中一个顶点受到约束,所有顶点上的均匀力都会导致均匀的平移,不会改变应变从零到零。
对于本文中的例子,您绝对不需要使用任意的精确算法。事实上,浮标通常足以进行这些类型的模拟。
发布于 2011-11-27 22:59:28
我可能弄错了,但c++双倍的只有小数点15位(至少我的std::numeric_limits是这么说的)。所以你的精确度太低了。
因此,您可能最终需要一个任意精确算术库,例如http://gmplib.org/。
https://stackoverflow.com/questions/8289589
复制相似问题