【问题标题】:Calculate the volume of a GeometryModel3D计算 GeometryModel3D 的体积
【发布时间】:2013-05-09 11:38:27
【问题描述】:

我正在使用 HelixToolkit 的 ModelImporter 类(Helix 3D Toolkit is a collection of custom controls and helper classes for WPF.) 从 STL 文件(STereoLithography is a file format native to the stereolithography CAD software created by 3D Systems))加载 3D 对象。3D 模型包含 ModelGroup3D 对象,其中包含一个或多个 GeometryModel3D 对象,具体取决于模型由多少部分组成。我想计算整个3D模型的体积。我搜索了类似的问题,唯一回答的是这个Calculate volume of 3D mesh,我不知道如何为我的解决方案进行改革。由于我是新手,任何帮助非常感谢。

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

谢谢

【问题讨论】:

标签: c# wpf algorithm computational-geometry volume


【解决方案1】:

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

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

【讨论】:

  • 您可以直接从表面网格中获取体积——请参阅此处的 MvGs 答案..stackoverflow.com/questions/14710682/…。应该更快。
  • 是的,鞋带算法似乎非常适合我,而且确实比 Delaunay 快得多,谢谢
【解决方案2】:

最简单的方法是计算所有三角形的高斯通量。 对于“理论”,如果你的表面是封闭的,那么想象一个向量场正在穿过它,那么进来的东西等于出来的东西,也等于封闭的体积。有关微积分的详细信息,请查看“高斯定理”和 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;
}

如果您有任何问题,请不要犹豫,我可以开发您如何使用该功能。 玩得开心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-09
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多