2013-10-15 39 views
5

Bir nokta var ve dışbükey gövdesini bulmak istiyorum. Onları scipy.spatial (ConvexHull veya Delaunay) 'a verdiğimde, sadece orijinal puanları geri alırım. Yapım yoluyla, bu durumda olmamalı.scipy.spatial içinde dışbükey gövde rutinleri bana özgün bir dizi puan verir

Burada paketlenmiş numpy dizisi olarak the points vardır. verilen 2d örneklerde yapıldığı gibi, Açıkçası bu nokta, bazı dışbükey gövdesine iç ve spatial.ConvexHull (noktaları) veya spatial.Delaunay (nokta) ile çıkarılmalıdır

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() 

: My Kod aşağıda verilmiştir here.

Neden orijinal noktaları geri aldığımı bilen var mı? Dış noktaları bulmak için kaba kuvvet uygulayabilirim ve sadece bu noktaları çizebilirim (nihai amaç noktaların yaklaştığı dışsal şekil için bir yüzey arsasıdır), fakat scipy.spatial'ın bunu yapabilmesi gerektiği anlaşılıyor.

cevap

7

Girdi noktalarınızı geri döndüren .points özniteliğinizi kullanıyorsunuz. Bunun yerine, .simplices özniteliğini kullanmayı deneyin, bu da size "dışbükey gövdenin basit yönlerini oluşturan noktaları" verir.

See the documentation for more info.

+4

bu olabilir 'hull.points [np.unique (hull.simplices)]' diye dışbükey gövde benzersiz noktaların fiili listesini almak için istediği belirtildi. – Jaime

+0

Bu böyle! Çok teşekkürler. – benten