我想绘制一个stl文件。我已经准备好了我的顶点。目的是获取每个三角剖分的面孔,这将由
进行vtx=np.vstack((Vertex1[i],Vertex2[i],Vertex3[i]))
因此,您可以看到Vertex1 [n],vertex2 [n],vertex3 [n]的每个n'thenter属于同一脸。
tri = a3d.art3d.Poly3DCollection([vtx])
我们获得了3D多边形的集合,并将其与add_collection3d结合使用以绘制所有3D多边形。
所以我的问题是:有没有办法在下面没有循环的情况下进行操作,以使代码更快地制作代码?
import numpy as np
import mpl_toolkits.mplot3d as a3d
import matplotlib.colors as colors
import matplotlib.pyplot as plt
Vertex1 = np.random.rand(9000,3)
Vertex2 = np.random.rand(9000,3)
Vertex3 = np.random.rand(9000,3)
ax = a3d.Axes3D(plt.figure())
for i in range(Vertex1.shape[0]):
vtx=np.vstack((Vertex1[i],Vertex2[i],Vertex3[i]))
tri = a3d.art3d.Poly3DCollection([vtx])
tri.set_color(colors.rgb2hex([0.9,0.6,0.]))
tri.set_edgecolor('k')
ax.add_collection3d(tri)
plt.show()
谢谢!
而不是在每个三角形中创建9000个集合,而是在其中创建一个带有9000个三角形的单个集合。
import numpy as np
import mpl_toolkits.mplot3d as a3d
import matplotlib.colors as colors
import matplotlib.pyplot as plt
Vertex1 = np.random.rand(9000,3)
Vertex2 = np.random.rand(9000,3)
Vertex3 = np.random.rand(9000,3)
ax = a3d.Axes3D(plt.figure())
v = np.stack((Vertex1,Vertex2,Vertex3),axis=2)
tri = a3d.art3d.Poly3DCollection(v)
tri.set_color(colors.rgb2hex([0.9,0.6,0.]))
tri.set_edgecolor('k')
ax.add_collection3d(tri)
plt.show()