2013-10-15 11 views
5

मेरे पास अंक का एक सेट है और उत्तल हल ढूंढना चाहते हैं। जब मैं उन्हें scipy.spatial (या तो ConvexHull या Delaunay) देने के लिए, मैं सिर्फ अंक के मूल सेट मिलता है। निर्माण से, यह मामला नहीं होना चाहिए।scipy.spatial में उत्तल hull routines मुझे वापस अंक के अपने मूल सेट देता है

यहां the points एक मसालेदार 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 (अंक) या spatial.Delaunay (अंक) के माध्यम से हटा दिया जाना चाहिए के रूप में दिया 2 डी उदाहरण में किया: मेरे कोड नीचे दिया गया है here

क्या किसी को पता है कि मुझे अंक का मूल सेट क्यों मिल रहा है? मैं बाहरी बिंदुओं को ढूंढ सकता हूं और केवल उन चीजों को साजिश कर सकता हूं (अंतिम लक्ष्य बिंदुओं द्वारा अनुमानित बाहरी आकार के लिए एक सतह साजिश है), लेकिन ऐसा लगता है कि scipy.spatial ऐसा करने में सक्षम होना चाहिए।

उत्तर

7

आप .points विशेषता का उपयोग कर रहे हैं जो आपको इनपुट पॉइंट देता है। इसके बजाए .simplices विशेषता का उपयोग करने का प्रयास करें, जो आपको "उत्तल हल के सरल पहलुओं को बनाने वाले बिंदु" देता है।

See the documentation for more info.

+4

यह शायद है 'hull.points [np.unique (hull.simplices)]' कि वह उत्तल पतवार में अद्वितीय अंक की वास्तविक सूची प्राप्त करने के कॉल करने के लिए चाहता है। – Jaime

+0

यह करता है! बहुत बहुत धन्यवाद। – benten

संबंधित मुद्दे