2013-08-24 8 views
12

अंक S (x, y, z) के एक सेट को देखते हुए। उन बिंदुओं के convex hull कैसे खोजें?एक 3 आयामी अंतरिक्ष में उत्तल हल को कैसे ढूंढें

मैं here से एल्गोरिथ्म को समझने की कोशिश की है, लेकिन बहुत ज्यादा नहीं मिल सकता है।

इसे कहते हैं:

पहले परियोजना xy विमान पर अंक के सभी, और एक बढ़त है कि उच्चतम y- निर्देशांक के साथ बिंदु चुना था और उसके बाद से एक यात्रा करके पतवार पर निश्चित रूप से है किनारे के दूसरे अंतराल को निर्धारित करने के लिए उपहार लपेटना। यह अपूर्ण झोपड़ी का पहला हिस्सा है। फिर हम इसे हलचल बनाते हैं। इस पहले किनारे पर विचार करें; अब हल के पहले त्रिकोणीय चेहरे को बनाने के लिए एक और बिंदु खोजें। हम इस बिंदु को उठाकर ऐसा करते हैं कि अन्य सभी बिंदु इस त्रिभुज के दाईं ओर झूठ बोलते हैं, जब उचित रूप से देखा जाता है (जैसे गिफ्ट-रैपिंग एल्गोरिदम में, जिसमें हमने किनारे को चुना है जैसे कि अन्य सभी बिंदु दाईं ओर हैं वह किनारा)। अब हल में तीन किनारों हैं; जारी रखने के लिए, हम उनमें से एक को मनमाने ढंग से चुनते हैं, और फिर इस किनारे के साथ एक नया त्रिकोण बनाने के लिए एक और बिंदु खोजने के लिए सभी बिंदुओं के माध्यम से स्कैन करते हैं, और इसे तब तक दोहराएं जब तक कोई किनारों न छोड़े जाएं। (जब हम एक नया त्रिकोणीय चेहरा बनाते हैं, तो हम पूल में दो किनारों को जोड़ते हैं, हालांकि, हमें पहले यह जांचना होगा कि क्या उन्हें पहले से ही हल में जोड़ा गया है, इस मामले में हम उन्हें अनदेखा करते हैं।) ओ (एन) चेहरे हैं, और प्रत्येक पुनरावृत्ति ओ (एन) समय लेता है क्योंकि हमें सभी शेष बिंदुओं को स्कैन करना होगा, ओ (एन 2) देना।

क्या कोई इसे अधिक स्पष्ट तरीके से समझा सकता है या एक सरल वैकल्पिक दृष्टिकोण सुझा सकता है।

उत्तर

11

मैं सुझाव देता हूं कि पहले त्वरित हल जैसे आसान दृष्टिकोण का प्रयास करें। (बीटीडब्ल्यू, उपहार रैपिंग के लिए ऑर्डर ओ (एनएच) ओ (एन 2) नहीं है, जहां एच हल पर बिंदु है और त्वरित हल के क्रम ओ (एन लॉग एन) है।

औसत परिस्थितियों में त्वरित पतवार काफी अच्छी तरह से काम करता है, लेकिन संसाधन आमतौर पर एक वृत्त की परिधि पर झूठ बोल उच्च समरूपता के मामलों या अंक में धीमी हो जाती है। त्वरित पतवार निम्न चरणों के लिए तोड़ा जा सकता है:

  1. न्यूनतम और अधिकतम x निर्देशांक के साथ अंक का पता लगाएं, उन उत्तल का हिस्सा बनने के लिए बाध्य कर रहे हैं।

  2. सेट को दो अंकों के सबसेट में विभाजित करने के लिए दो बिंदुओं द्वारा बनाई गई रेखा का उपयोग करें, जिसे पुनरावर्ती संसाधित किया जाएगा। enter image description here

  3. , बिंदु निर्धारित लाइन से अधिकतम दूरी के साथ लाइन के एक तरफ,। इस के साथ पहले दो बिंदु एक त्रिकोण बनाते हैं।

  4. उस त्रिभुज के अंदर स्थित बिंदु उत्तल हॉल का हिस्सा नहीं हो सकते हैं और इसलिए अगले चरणों में अनदेखा किया जा सकता है।

  5. त्रिकोण (प्रारंभिक रेखा नहीं) द्वारा बनाई गई दो पंक्तियों पर पिछले दो चरणों को दोहराएं। enter image description here

  6. इतने पर जब तक कोई और अधिक अंक छोड़ दिया जाता है कर रही पर रखें, प्रत्यावर्तन का अंत आ है और चयनित अंक उत्तल पतवार का गठन। enter image description here

3 डी उत्तल पतवार त्वरित पतवार कलन विधि का उपयोग के लिए this impementaion और स्पष्टीकरण देखें।

उपहार रैपिंग एल्गोरिथ्म:

जार्विस के 'मैच एल्गोरिथ्म अंक के आसपास तार का एक टुकड़ा लपेटकर की तरह है। यह बाएं बिंदु बिंदु एल की गणना करके शुरू होता है, क्योंकि हम जानते हैं कि बाएं सबसे अधिक बिंदु एक उत्तल होल वर्टेक्स होना चाहिए। इस प्रक्रिया में रैखिक समय लगेगा। फिर एल्गोरिदम अगले क्रम तक प्रत्येक क्रमिक उत्तल हेल वर्टेक्स को खोजने के लिए पिवोटिंग चरणों की एक श्रृंखला करता है वर्टेक्स फिर से मूल बाएं बिंदु है।

एल्गोरिदम को इस तरह के उत्तल उत्थान हेल वर्टेक्स मिलते हैं: एक बिंदु पी के तुरंत बाद वर्टेक्स वह बिंदु है जो पी पर खड़े किसी और के दूसरे बिंदु को देखने के अधिकार के लिए सबसे दूर प्रतीत होता है। दूसरे शब्दों में, यदि q पी के बाद vertex है, और आर कोई अन्य इनपुट बिंदु है, तो ट्रिपल पी, क्यू, आर विपरीत घड़ी के क्रम में है। हम O (n) काउंटर-घड़ी के परीक्षणों की एक श्रृंखला निष्पादित करके रैखिक समय में प्रत्येक क्रमिक वर्टेक्स पा सकते हैं।

चूंकि एल्गोरिदम प्रत्येक उत्तल हेल वर्टेक्स के लिए ओ (एन) समय बिताता है, सबसे खराब केस चलने का समय ओ (एन 2) होता है। हालांकि, अगर उत्तल हॉल में बहुत कम शिखर होते हैं, तो जार्विस का मार्च बेहद तेज़ है। चलने वाले समय को लिखने का एक बेहतर तरीका ओ (एनएच) है, जहां एच उत्तल हलक की संख्या है। सबसे बुरे मामले में, एच = एन, और हम अपने पुराने ओ (एन 2) समय को बाध्य करते हैं, लेकिन सर्वोत्तम मामले में एच = 3, और एल्गोरिदम को केवल ओ (एन) समय की आवश्यकता होती है। यह एक तथाकथित आउटपुट-संवेदनशील एल्गोरिदम है, आउटपुट जितना छोटा होगा, तेज़ एल्गोरिदम।

निम्न छवि आप और अधिक विचार enter image description here

+0

पर एल्गोरिथ्म एक टिप्पणी छोड़ कृपया अगर कुछ स्पष्ट नहीं है। – anon

+4

ऐसा लगता है कि ओपी 3 डी हल्स के लिए मदद मांग रहा है, लेकिन आपका (अच्छा!) विवरण 2 डी हल्स के लिए है ... –

+3

यदि आप 2 डी समझते हैं, तो 3 डी एक बहुत ही सरल सामान्यीकरण है;) – anon

11

3 डी उत्तल पतवार को लागू करने देना चाहिए आसान नहीं है, लेकिन कई एल्गोरिदम लागू किया गया है, और कोड व्यापक रूप से उपलब्ध है। उपयोग के लिए गुणवत्ता और समय निवेश के उच्च अंत में CGAL है। दोनों उपायों पर निचले सिरे पर my own C code है:
          DCG Cover
के बीच में वहाँ this implementation of QuickHull सहित सभी वेब पर कोड है।

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