我想绘制一个STL文件。我已经获得了STL-File的Vertex。目标是获得每个三角测量的面孔,这将由
完成vtx=np.vstack((Vertex1[i],Vertex2[i],Vertex3[i]))
所以你可以看到Vertex1 [n]的每个第n个条目,Vertex2 [n],Vertex3 [n]属于同一个面。
通过
tri = a3d.art3d.Poly3DCollection([vtx])
我们正在获取3D多边形的集合,并将其与add_collection3d组合以绘制所有3D多边形。
所以现在我的问题是:在使代码更快的意义上,有没有办法在没有for循环的情况下进行下面的操作?
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()
谢谢!
答案 0 :(得分:1)
除了创建每个都有一个三角形的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()