我有大量的3D点(200k),用于模拟我用plot3d()绘制的对象。虽然程序没有崩溃并且仍在运行,但是它很慢。有没有内置的方法我只能渲染可见的点?或者更好的是,在外部点上创建一个表面?
我已经读过,加速它的一种方法是创建一个包含所有点的VTK对象,而不是每个点一个对象。
x,y,z,_,s = zip(*voxels)
print len(x) # 180k
points3d(x, y, z,s,scale_factor=0.8)
show()
答案 0 :(得分:0)
嗯,这可能是一个解决方案,具体取决于您的数据的样子 你可以计算你的点集的复杂船体,即:
import numpy as np
from mayavi import mlab
from scipy.spatial import ConvexHull
x = np.random.rand(200000)
y = np.random.rand(200000)
z = np.random.rand(200000)
points = np.column_stack((x, y, z))
ch = ConvexHull(points)
hull_ids = ch.vertices
mlab.points3d(x[hull_ids], y[hull_ids], z[hull_ids])
mlab.show()
另一种方法是使用Delaunay函数计算alpha形状。这里有很好的解释,例如: http://sgillies.net/blog/1155/the-fading-shape-of-alpha/