Инициализировать треугольную сетку, например, в VTK на основе массива np с координатами вершин и массива np с треугольниками
Не могли бы вы рассказать мне, как мне инициализировать треугольную сетку на основе массива np с координатами вершин и массива np с треугольниками (он содержит тройки индексов вершин из первого массива)?
Это можно сделать в VTK или любой другой библиотеке Python, конечной целью является прореживание этого меша.
Спасибо.
1 ответ
Вы можете использовать несколько библиотек:
Тримеш
Trimesh
является одним из лучших; Его можно использовать в Colab , чтобы показать:
import trimesh
verts = [[50,50,50], [70,40,50], [50,40,80], [80,70,50]]
faces = [[0,1,2], [2,1,3], [1,0,3]]
mesh = trimesh.Trimesh(vertices=verts, faces=faces)
mesh.show()
# for facet in mesh.facets:
# mesh.visual.face_colors[facet] = trimesh.visual.random_color()
# mesh.split()
# mesh.show()
SciPy
1.ConvexHull
:
import scipy as sp
from scipy.spatial import ConvexHull
import matplotlib as mpl
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d as a3
verts = np.array(verts)
hull = ConvexHull(verts)
indices = hull.simplices
faces = verts[indices]
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.set_xlim([35, 85])
ax.set_ylim([35, 85])
ax.set_zlim([35, 85])
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
for f in faces:
face = a3.art3d.Poly3DCollection([f])
face.set_color(mpl.colors.rgb2hex(np.random.rand(3)))
face.set_edgecolor('k')
face.set_alpha(0.5)
ax.add_collection3d(face)
plt.show()
2.Delaunay
:
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Delaunay
verts = np.array(verts)
tri = Delaunay(verts)
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')
ax.azim = 70
ax.plot_trisurf(verts[:, 0], verts[:, 1], verts[:, 2], triangles=tri.simplices, cmap=plt.cm.Spectral)
plt.show()