给定三角形网格查找对象的体积
Find volume of object given a triangular mesh
我有一个由顶点和三角形面定义的对象。
verts = [[0.1, 1., 1. ] [1., 1., 0.1] [1., 0.1, 1. ] [1., 1., 1.9] [1., 1.9, 1. ]
[1.9, 1., 1. ] ]
和三角形面,定义构成每个面的顶点:
faces = [[ 2, 1, 0] [ 0, 3, 2] [ 1, 4, 0] [ 0, 4, 3] [ 5, 1, 2] [ 3, 5, 2]
[ 5, 4, 1] [ 4, 5, 3]]
我可以使用 Poly3DCollection 创建网格
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
mesh = Poly3DCollection(verts[faces])
我可以使用 mesh
以 3D 方式绘制对象。 python 有没有办法找到这个物体的体积?论文 (here, here, and here) 表明这是可能的。如果不在 python 中,是否有其他语言的方法可以实现这一点(即您知道的)。提前致谢!
在 C++ 中,CGAL 可以使用以下函数计算三角网格的体积:
https://doc.cgal.org/latest/Polygon_mesh_processing/group__measure__grp.html#ga85cebf8fbc7cb8930fd16aeee2878c7e
遗憾的是,我认为它没有移植到 python。
我用 meshplex
解决了这个问题
import meshplex
import numpy as np
verts = [[0.1, 1., 1. ], [1., 1., 0.1], [1., 0.1, 1. ], [1., 1., 1.9], [1., 1.9, 1. ], [1.9, 1., 1. ]]
faces = [[ 2, 1, 0], [ 0, 3, 2], [ 1, 4, 0], [ 0, 4, 3], [ 5, 1, 2], [ 3, 5, 2], [ 5, 4, 1], [ 4, 5, 3]]
mesh = meshplex.MeshTri(np.array(points), np.array(faces))
V = np.sum(mesh.cell_volumes)
print("Volume =", V)
# Volume = 5.6118446
我有一个由顶点和三角形面定义的对象。
verts = [[0.1, 1., 1. ] [1., 1., 0.1] [1., 0.1, 1. ] [1., 1., 1.9] [1., 1.9, 1. ]
[1.9, 1., 1. ] ]
和三角形面,定义构成每个面的顶点:
faces = [[ 2, 1, 0] [ 0, 3, 2] [ 1, 4, 0] [ 0, 4, 3] [ 5, 1, 2] [ 3, 5, 2]
[ 5, 4, 1] [ 4, 5, 3]]
我可以使用 Poly3DCollection 创建网格
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
mesh = Poly3DCollection(verts[faces])
我可以使用 mesh
以 3D 方式绘制对象。 python 有没有办法找到这个物体的体积?论文 (here, here, and here) 表明这是可能的。如果不在 python 中,是否有其他语言的方法可以实现这一点(即您知道的)。提前致谢!
在 C++ 中,CGAL 可以使用以下函数计算三角网格的体积: https://doc.cgal.org/latest/Polygon_mesh_processing/group__measure__grp.html#ga85cebf8fbc7cb8930fd16aeee2878c7e
遗憾的是,我认为它没有移植到 python。
我用 meshplex
import meshplex
import numpy as np
verts = [[0.1, 1., 1. ], [1., 1., 0.1], [1., 0.1, 1. ], [1., 1., 1.9], [1., 1.9, 1. ], [1.9, 1., 1. ]]
faces = [[ 2, 1, 0], [ 0, 3, 2], [ 1, 4, 0], [ 0, 4, 3], [ 5, 1, 2], [ 3, 5, 2], [ 5, 4, 1], [ 4, 5, 3]]
mesh = meshplex.MeshTri(np.array(points), np.array(faces))
V = np.sum(mesh.cell_volumes)
print("Volume =", V)
# Volume = 5.6118446