Найдите объем объекта, заданный сеткой tri angular - PullRequest
0 голосов
/ 06 мая 2020

У меня есть объект, определяемый вершинами и angular гранями.

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. ] ]

И три angular граней, которые определяют вершины, составляющие каждую грань:

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]]

Я могу создать меня sh с помощью Poly3DCollection

from mpl_toolkits.mplot3d.art3d import Poly3DCollection
mesh = Poly3DCollection(verts[faces])

Я могу использовать mesh для построения объекта в 3D. Есть ли способ в python найти объем этого объекта? Документы ( здесь , здесь и здесь ) указывают, что это возможно. Если не в python, существуют ли методы на других языках, которые делают это возможным (то есть, о которых вы знаете). Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Я решил это с помощью meshplex

import meshplex

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 = sum(mesh.cell_volumes)

print("Volume = ", V)
# Volume = 5.6118446
1 голос
/ 07 мая 2020

В C ++ CGAL может вычислить объем триангулированного меня sh с помощью этой функции: https://doc.cgal.org/latest/Polygon_mesh_processing/group__measure__grp.html#ga85cebf8fbc7cb8930fd16aeee2878c7e

К сожалению, я не думаю, что он был перенесен в python.

...