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

我想计算一个表面由三角形组成的3D网格物体的体积。



慕婉清6462132
浏览 943回答 3
3回答

森栏

实际上是一个非常简单的计算。诀窍是计算四面体的有符号体积 -根据您的三角形并以原点为起点。体积的符号来自于三角形是否指向原点方向。(三角形的法线本身取决于顶点的顺序,这就是为什么您看不到下面明确引用的三角形的原因。)这全部归结为以下简单功能: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());}

慕勒3428872

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