私は点集合を持ち、凸包を探したいと思います。私がscipy.spatial(ConvexHullまたはDelaunayのいずれか)にそれらを与えるとき、私はちょうどポイントの元のセットを戻します。建設によって、これは当てはまりません。scipy.spatialの凸包ルーチンは、元の点集合を返します
ここにthe pointsは、漬けた淡色の配列である。所与の2Dの実施例で行ったように、明らかにこれらの点のいくつかが凸包に内装され、spatial.ConvexHull(点)またはspatial.Delaunay(ポイント)を介して除去されなければならない
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()
:私のコードを以下に示します。 here。
なぜ元のポイントセットが返ってくるのか誰にも分かりますか?私はブルートフォースで外的な点を見つけてそれらをプロットすることができます(最終的な目標は点によって近似された外形の表面プロットです)が、scipy.spatialはこれを行うことができるはずです。
それはおそらく彼が凸包でユニークなポイントの実際のリストを取得するために呼び出すために望んでいることを 'hull.points [np.unique(hull.simplices)]'です。 – Jaime
それはそうです!本当にありがとう。 – benten