2011-08-11 9 views
6

मैं बहुभुज बनाने के लिए दक्षिणावर्त क्रम में बिंदुओं का एक वेक्टर सॉर्ट करना चाहता हूं लेकिन मुझे ऐसा करने के लिए उचित केंद्र की आवश्यकता है। मैंने औसत विधि की कोशिश की है, लेकिन कुछ बिंदुओं को सही ढंग से क्रमबद्ध नहीं किया गया है। केंद्र को खोजने का सही तरीका क्या है जो घड़ी की दिशा में अंक क्रमबद्ध करते समय काम करेगा?उन्हें दक्षिणावर्त क्रमबद्ध करने के लिए अंक के एक सेट का केंद्र ढूँढना?

यह अवतल भागों पर विफल हो रहा है

धन्यवाद

यहाँ एक तस्वीर है: enter image description here

हरे वृत्त केंद्र है।

इसे और अधिक इस तरह दिखना चाहिए: enter image description here

+2

यह देखते हुए कि बहुभुज केवल इसके बिंदुओं द्वारा परिभाषित किया गया है और यह गैर-उत्तल है, मुझे यकीन नहीं है कि कुछ और बाधाओं के बिना समाधान है। यह स्पष्ट नहीं है कि बहुभुज विशिष्ट रूप से परिभाषित किया गया है। – Keith

उत्तर

11

"घड़ी के क्रम में क्रमबद्ध करने" की धारणा अच्छी तरह से परिभाषित नहीं है यदि आपके पास पूर्व परिभाषित केंद्र बिंदु नहीं है।

यदि आपके पास केवल उन बिंदुओं का एक गुच्छा है जिन्हें आपको सॉर्ट करने की आवश्यकता है और आप केंद्र को पहले से नहीं जानते हैं, तो समस्या में आम तौर पर एक समाधान नहीं होता है। समस्या में कई वैकल्पिक समाधान हैं, जिनमें से प्रत्येक परिणामस्वरूप आपको एक अलग बहुभुज देगा।

इसके अलावा, एक ऐसा केंद्र ढूंढना जो आपको सीडब्लू (या सीसीडब्ल्यू) सॉर्टिंग द्वारा मूल बहुभुज को फिर से बनाने की अनुमति देगा, केवल बहुभुज के विशेष वर्ग के लिए संभव है: इसलिए star-shaped बहुभुज कहा जाता है। स्टार-आकार वाले बहुभुज की मुख्य संपत्ति यह है कि बहुभुज के अंदर एक बिंदु खोजना संभव है जिससे बहुभुज का पूरा इंटीरियर "देखने योग्य" है (मुझे उम्मीद है कि परिभाषा के बिना यह स्पष्ट है कि "देखने योग्य" का अर्थ क्या है)।

यदि आपका बहुभुज सितारा आकार का नहीं है, तो ऐसे केंद्र बिंदु बस मौजूद नहीं है। और, इस कारण से, सीडब्ल्यू सॉर्टिंग द्वारा मूल बहुभुज को फिर से बनाना संभव नहीं है।

तस्वीर में आपका गाय समोच्च स्पष्ट रूप से एक स्टार के आकार का बहुभुज नहीं है, जिसका अर्थ है कि आप कभी भी किसी भी केंद्र के आसपास के बिंदुओं को क्रमबद्ध करके मूल गाय समोच्च को फिर से बनाने में सक्षम नहीं होंगे। कोई "सही तरीका" नहीं है। यह संभव नहीं है।

+0

फिर एल्गोरिदम के किस प्रकार मुझे मूल गाय मिलेगा? – jmasterx

+1

@ मिलो: 5-पॉइंट स्टार जैसे सरल पॉलीगॉन की कल्पना करें। यदि आप रेखाओं को मिटते हैं और केवल बिंदुओं को देखते हैं, तो कम से कम दो संभव पुनर्निर्माण होते हैं: एक सितारा, या दो सांद्रिक पेंटगोन प्रत्येक लापता पक्ष के साथ, दो लाइनों से जुड़े होते हैं। लाइनों को मिटाना मूल्यवान जानकारी निकाल देता है और समस्या को विश्वसनीय रूप से हल नहीं किया जा सकता है। (संयोग से, एंड्री कहते हैं, सितारों ने पहले से कोशिश की गई एल्गोरिदम के लिए उपयुक्त होने के लिए किया है, लेकिन गायों सितारों नहीं हैं।) – Potatoswatter

+2

@ मिलो: यदि समोच्च के बिंदु बहुत घनी (विशेष रूप से घुमावदार हिस्सों में) पैक होते हैं, तो आप एक बिंदु से अगले निकटतम बिंदु तक कूदकर गाय को फिर से बना सकते हैं। हालांकि, यदि अंक पर्याप्त घने नहीं हैं, तो कुछ स्थानों पर आप त्रुटियों के साथ समाप्त हो सकते हैं। सामान्य स्थिति में, अंक के एक असाधारण सेट से मूल समोच्च को फिर से बनाना संभव नहीं है। जैसा कि मैंने उपरोक्त कहा है, वहां कई अलग-अलग रूप हैं जिन्हें अंक के एक सेट से बनाया जा सकता है। चूंकि आपके पास फैसला करने का कोई तरीका नहीं है, कौन सा सही है, आप इसे फिर से नहीं बना सकते हैं। – AnT

-1

देखें Barycenter। हो सकता है कि आप

+0

यही वह कहता है कि उसने पहले ही कोशिश की है। – Potatoswatter

1

लेते हुए केंद्र के रूप में इंगित करते हैं, तो आप सेट में सभी बिंदुओं के लिए दूरी और कोण निर्धारित करने में सक्षम होना चाहिए, और इसके बाद कोण द्वारा क्रमबद्ध करना सरल है। हालांकि, जिस बिंदु को आप केंद्र के रूप में चुनते हैं वह सॉर्ट ऑर्डर को प्रभावित करेगा, इसलिए यह जानना मुश्किल है कि "सही" ऑर्डर तब तक होना चाहिए जब तक आप केंद्र के रूप में कोई बिंदु नहीं चुनते।

तो, यदि आपने केंद्र के रूप में केंद्र (एक अच्छी पसंद की तरह लगता है) चुना है, लेकिन कुछ बिंदुओं को उस बिंदु से गलत तरीके से सॉर्ट किया गया है, तो मैं कहूंगा कि आपके सॉर्टिंग कोड में कोई समस्या है। वैकल्पिक रूप से, अगर आपको सॉर्ट ऑर्डर के बारे में उम्मीद थी जो आपके एल्गोरिदम द्वारा नहीं मिला था, तो मैं कहूंगा कि आपकी धारणाओं में से एक (सॉर्ट ऑर्डर या सेंटर लोकेशन) गलत था।

+0

समस्या पर अधिक अंतर्दृष्टि के लिए मेरी तस्वीरें देखें। – jmasterx

+0

आपकी सॉर्टिंग सही है। समस्या यह है कि आप कोण के अनुसार सॉर्ट करके गाय का उत्पादन नहीं कर सकते हैं। – Caleb

+0

फिर एल्गोरिदम के किस तरह से यह कर सकता है? अभी मुझे तस्वीर से ही रूपरेखा वर्टिसीज मिलती है लेकिन वे स्कैनलाइन ऑर्डर में हैं। – jmasterx

2

मुझे लगता है कि सबसे विश्वसनीय रणनीति (आपके प्रोग्राम/सिस्टम को फिर से डिजाइन करने के अलावा, यह समस्या पहले स्थान पर नहीं उभरती है) बहुभुज के कुल परिधि को कम करना है।प्रत्येक बिंदु के लिए

  1. , निकटतम बिंदु मिल:

    यह एक आसान समस्या नहीं है, लेकिन यहाँ एक अनुमानी कि अच्छी तरह से काम करना चाहिए। यह संभावित कनेक्शन के एक सेट को परिभाषित करता है।

  2. बहुभुज के लिए सबसे लंबा संभावित कनेक्शन जोड़ें।
  3. 1-2 दोहराएं, लेकिन उन कनेक्शनों को अनदेखा करें जो पहले से ही किए जा चुके हैं और जिनके पास पहले से ही दो कनेक्शन हैं।

यह केवल एक उदारवादी है, समाधान नहीं। मुझे यकीन नहीं है कि यह बहुभुज का उत्पादन करने की भी गारंटी है।

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