使用mpl_toolkits.mplot3d在python numpy中使用vstack进行循环的速度更快



我想绘制一个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() 

相关内容

  • 没有找到相关文章

最新更新