我正在使用HelixToolkit的ModelImporter类(Helix 3D Toolkit is a collection of custom controls and helper classes for WPF.)来加载STL文件中的3D对象(STereoLithography is a file format native to the stereolithography CAD software created by 3D Systems)。)3D模型包含ModelGroup3D对象,其中包含一个或多个GeometryModel3D对象,具体取决于模型的多少部分我想要计算整个3D模型的体积。我搜索了类似的问题,唯一回答的是Calculate volume of 3D mesh,我不知道如何改进我的解决方案。非常感谢任何帮助。
此外,我正在加载的模型都是关闭的网格。
由于
答案 0 :(得分:2)
首先将曲面网格转换为体网格。例如,您可以将三角形曲面网格转换为四面体网格。一种方法是通过构造表面三角形的约束Delaunay三角剖分来实现这一目的。
接下来,通过对体网格中所有元素的体积求和,可以很好地估计表面网格所包含的体积。例如,通过对网格中所有四面体的体积求和。
答案 1 :(得分:0)
最简单的方法是计算所有三角形的高斯通量。 对于“理论”,如果你的表面是关闭的,那么想象一个矢量字段正在通过它,那么进来的东西等于出来的东西,也等于被包围的体积。对于微积分细节检查“高斯定理”和格林 - 鸵鸟积分。
计算它:
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;
}
如果您有任何疑问,请不要犹豫,我可以了解您是如何实现这一功能的。 玩得开心。