我有一组点,想找到凸包。当我将它们提供给 scipy.spatial(ConvexHull 或 Delaunay)时,我只会得到原始点集。通过构造,情况不应如此。
这是一个腌制的numpy数组的点。我的代码如下:
import pickle
from scipy import spatial
import matplotlib.pyplot as plt
points = pickle.load( open( "points.p", "rb" ) )
hullpoints = spatial.ConvexHull(points).points
# plot points
fig = plt.figure()
ax = fig.gca(projection='3d')
# ax.plot(points[:, 0], points[:, 1], points[:, 2], 'r.') # original points
ax.plot(hullpoints[:, 0], hullpoints[:, 1], hullpoints[:, 2], 'r.') # convex hull of points
# set labels and show()
ax.set_xlabel('Player 1')
ax.set_ylabel('Player 2')
ax.set_zlabel('Player 3')
plt.show()
显然,其中一些点位于凸包内部,应通过 spatial.ConvexHull(points) 或 spatial.Delaunay(points) 移除,如此处给出的 2d 示例中所做的那样。
有谁知道我为什么要拿回原来的积分?我可以蛮力找到外部点并仅绘制那些(最终目标是由点近似的外部形状的表面图),但似乎 scipy.spatial 应该能够做到这一点。