计算一个GeometryModel3D的体积



我正在使用HelixToolkit的ModelImporter类(Helix 3D Toolkit是WPF的自定义控件和helper类的集合)从STL文件加载3D对象(STereoLithography是3D Systems创建的立体雕刻CAD软件的原生文件格式)。3D模型包含ModelGroup3D对象,其中包含一个或多个GeometryModel3D对象,具体取决于模型由多少部分组成。我想计算整个3D模型的体积。我搜索了类似的问题,唯一的答案是这一个计算3D网格的体积,我不确定如何为我的解决方案进行改革。因为我是新手,任何帮助我都非常感激。

另外,我正在加载的模型都是封闭网格。

谢谢

首先将曲面网格转换为体网格。例如,可以将三角曲面网格转换为四面体网格。一种方法是构造表面三角形的约束Delaunay三角剖分。

接下来,通过将体积网格中所有元素的体积相加,可以很好地估计表面网格所包围的体积。例如,通过将网格中所有四面体的体积相加

最简单的方法是计算所有三角形的高斯通量。根据"理论"如果你的曲面是封闭的,那么想象一个矢量场穿过它,那么进来的等于出来的也等于封闭的体积。有关微积分的详细信息,请参阅"高斯定理"和Green-ostrogradsky积分。

:

Vertex v1 ;
Vertex v2 ;
Vertex v3 ;
for (int i = 0;i< triangles.Count; i++)
{
v1 = triangles[i].P0;
v2 = triangles[i].P1;
v3 = triangles[i].P2;
Mesh.volume += (((v2.Y - v1.Y) * (v3.Z - v1.Z) - (v2.Z - v1.Z) * (v3.Y - v1.Y)) * (v1.X + v2.X + v3.X)) / 6;
}
如果您有任何问题,请不要犹豫,我可以告诉您如何到达那个函数。获得乐趣。

最新更新