如何通过 matplotlib 绘制四面体网格?
How to draw a Tetrahedron mesh by 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)
可以使用 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()
matplotlib 可能是执行此任务的错误工具。 3D 绘图很难,例如 ParaView to try out. You can use meshio(我的一个项目)可以将网格写入适当的数据类型:
import meshio
meshio.write('out.vtu', xyz, {'tetra': tets})
我想用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)
可以使用 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()
matplotlib 可能是执行此任务的错误工具。 3D 绘图很难,例如 ParaView to try out. You can use meshio(我的一个项目)可以将网格写入适当的数据类型:
import meshio
meshio.write('out.vtu', xyz, {'tetra': tets})