Как нарисовать сетку тетраэдра с помощью matplotlib?

Я хочу построить сетку тетраэдра matplotlibи следующие простые сетки четырехгранника:

xyz = np.array([
    [-1,-1,-1],
    [ 1,-1,-1], 
    [ 1, 1,-1],
    [-1, 1,-1],
    [-1,-1, 1],
    [ 1,-1, 1], 
    [ 1, 1, 1],
    [-1, 1, 1]], dtype=np.float) 

tets = np.array([
    [0,1,2,6],
    [0,5,1,6],
    [0,4,5,6],
    [0,7,4,6],
    [0,3,7,6],
    [0,2,3,6]], dtype=np.int)

Конечно, в практических приложениях число тетраэдров в сетке может быть большим. Я не могу найти полезную справочную информацию в Google. Итак, что является лучшим способом построения сетки тетраэдра matplotlib?

Кроме того, я могу получить все треугольные грани сетки.

tri = np.array([
 [0 2 1]
 [0 1 5]
 [0 6 1]
 [0 3 2]
 [0 2 6]
 [0 6 3]
 [0 7 3]
 [0 5 4]
 [0 6 4]
 [0 4 7]
 [0 6 5]
 [0 6 7]
 [1 2 6]
 [5 1 6]
 [2 3 6]
 [3 7 6]
 [4 5 6]
 [7 4 6]],dtype=np.int)

2 ответа

Решение

Matplotlib, возможно, не тот инструмент для решения этой задачи. Трехмерное построение сложно, и есть, например, ParaView, чтобы попробовать. Вы можете использовать meshio ( мой проект), чтобы записать ваш меш в соответствующий тип данных:

import meshio
meshio.write('out.vtu', xyz, {'tetra': tets})

введите описание изображения здесь

Можно использовать mpl_toolkits.mplot3d.art3d.Poly3DCollection:

import mpl_toolkits.mplot3d as a3
axes = a3.Axes3D(pl.figure())
vts = xyz[tri, :]
tri = a3.art3d.Poly3DCollection(vts)
tri.set_alpha(0.2)
tri.set_color('grey')
axes.add_collection3d(tri)
axes.plot(point[:,0], point[:,1], point[:,2], 'ko')
axes.set_axis_off()
axes.set_aspect('equal')
pl.show()
Другие вопросы по тегам