为了账号安全,请及时绑定邮箱和手机立即绑定

如何计算表面由三角形组成的3D网格物体的体积

如何计算表面由三角形组成的3D网格物体的体积

我想计算一个表面由三角形组成的3D网格物体的体积。
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

实际上是一个非常简单的计算。


诀窍是计算四面体的有符号体积 -根据您的三角形并以原点为起点。体积的符号来自于三角形是否指向原点方向。(三角形的法线本身取决于顶点的顺序,这就是为什么您看不到下面明确引用的三角形的原因。)


这全部归结为以下简单功能:


public float SignedVolumeOfTriangle(Vector p1, Vector p2, Vector p3) {

    var v321 = p3.X*p2.Y*p1.Z;

    var v231 = p2.X*p3.Y*p1.Z;

    var v312 = p3.X*p1.Y*p2.Z;

    var v132 = p1.X*p3.Y*p2.Z;

    var v213 = p2.X*p1.Y*p3.Z;

    var v123 = p1.X*p2.Y*p3.Z;

    return (1.0f/6.0f)*(-v321 + v231 + v312 - v132 - v213 + v123);

}

然后是一个驱动程序来计算网格的体积:


public float VolumeOfMesh(Mesh mesh) {

    var vols = from t in mesh.Triangles

               select SignedVolumeOfTriangle(t.P1, t.P2, t.P3);

    return Math.Abs(vols.Sum());

}


查看完整回答
反对 回复 2019-10-17
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

上面的方法适用于像球形四面体等“简单”对象(没有相交/重叠的三角形)。对于更复杂的形状,一个好主意是分割网格(将其关闭)并分别计算每个分段的体积。希望这可以帮助。


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 934 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信