बिंदु सेट संचालन के लिए वैकल्पिक अनुक्रमण विधियाँ


17

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

उदाहरण के लिए, क्या कोई डेटा संरचनाएं मौजूद हैं जो बहुभुज, या संघ संचालन में बिंदु को गति दे सकती हैं?


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

धन्यवाद, मुझे लगता है कि मुझे पाठ्यपुस्तकों को पढ़ने की आवश्यकता है। मेरे सवाल का मुद्दा यह था कि समय से पहले उन डेटा संरचनाओं की गणना कैसे की जा सकती है। क्या कोई पूर्व-संकलित कार्यान्वयन मौजूद है?
मैथ्यू स्नेप

मैथ्यू, यह एक बड़ा सवाल है। वास्तव में एक प्रदर्शन-उन्मुख जीआईएस उपयोगकर्ताओं को बार-बार आवेदन के लिए डेटा संरचनाओं को पूर्वस्थापित करने के विकल्प प्रदान करेगा। जैसा कि यह खड़ा है, सॉफ्टवेयर विज्ञापन के रूप में "जीआईएस" आमतौर पर केवल "स्थानिक अनुक्रमित" के रूप में इस तरह के पूर्व-वर्गीकरण की पेशकश करता है, जबकि अधिक सामान्य-उद्देश्य वाला सॉफ़्टवेयर जो जीआईएस विश्लेषण भी कर सकता है, जैसे कि मैथमेटिका (या कुछ हद तक R) उपयोगकर्ता की पेशकश करेगा। ऐसी चीजों पर अधिक नियंत्रण।
whuber

मुझे लगता है कि समस्या 2 डी वस्तुओं के "भग्न प्रकृति" और अनिश्चित और असंतुलित वितरण सूचना घनत्व पर आधारित है।
हुक्फिन

जवाबों:


2

केवल बहुभुज में प्वाइंट के लिए ठीक है:

मुझे लगता है कि समस्या 2d वस्तुओं के "भग्न प्रकृति" और स्थानिक जानकारी के अनिश्चित और असंतुलित वितरण पर आधारित है। यदि आपके पास एक नियमित ग्रिड है, तो सेल की स्थिति या संबंध को शांत करना आसान है। लेकिन एक इलाक़े के मॉडल के एक आइसोलिन में एक तरफ अपूर्ण भाग हो सकते हैं और दूसरी तरफ गणितीय रूप से जटिल होते हैं (मॉर्फोलॉजिकल रूप से सक्रिय भागों में लकीरें, घाटियाँ ...)।

अनुक्रमण दो चीजों को संभालने की कोशिश करता है:

  1. एक तेज़ दिनचर्या जो आपको एक सेट बाल्टी प्रदान करती है जिसमें आप ऐसी वस्तुओं को इकट्ठा करते हैं जिन्हें आप स्थानिक रूप से डिस्टिगुइश (बाल्टी!) कर सकते हैं। और BBoxes की गणना करना और संभालना आसान है।

  2. स्थानिक सामग्री (वस्तुओं) को भेद या संबंधित करने के लिए संबंधों का एक सेट (ओवरलैप, टच)।

दुर्भाग्य से BBoxes आपको कोई सुराग नहीं देगा, प्रत्येक BBox में कितने बिंदु हैं, ऑब्जेक्ट कैसे आकार (छेद, उत्तल, ...) हैं और कैसे जानकारी स्थानीय रूप से वितरित की गई है (ऊपरी बाएँ कोने में बिंदुओं का 90% BBox)। इसलिए आपको ऑब्जेक्ट स्तर पर तेज़ संचालन सदस्य मिल सकते हैं और परीक्षण के संबंध निर्माण में कई बार ढीला हो सकता है।

एक अधिक अनियमित दृष्टिकोण का उपयोग करने के लिए, IMO त्रिभुज के साथ संयोजन में और चतुष्कोण रणनीतियों पर है, जहां आप एक सूचकांक और संबंध सूचकांक के संबंध भवन भाग को एक साथ ला सकते हैं (बकेटिंग == संबंध निर्माण)।

प्वाइंट-इन-पॉलीगॉन-टेस्ट उदाहरण के लिए उपयोग करके अनियमित कैश बनाना संभव है:

  1. अपने पॉली कवर की विवश डेलौनाय त्रिकोणीयता, बाहर के कवर का पता लगाने के लिए अतिरिक्त सीमा जाल बिंदुओं के साथ
  2. इसे बॉक्स (एन फ्रैक्चर बकेट) से अधिक नहीं के साथ क्वाडट्री इंडेक्सिंग स्कीम में डालें।
  3. त्रिभुज सेट को खोजें जो बिंदु के अंतर्गत आता है - पत्ती चतुर्भुज में
  4. वह त्रिभुज ज्ञात कीजिए जिसमें बिंदु निहित है (अधिकतम परीक्षण का भाग। N त्रिकोण)
  5. और त्रिभुज कोने के बहुभुज आईडी के लिए पूछें
  6. यदि आईडी अद्वितीय है, तो बिंदु बहुभुज से संबंधित है, यदि यह बाहर नहीं है

टिन और क्वाडट्रैस के निर्माण की लागत बहुत अधिक है और गणना करना बहुत मुश्किल है और क्वाडट्री को बड़े और छोटे त्रिकोण (त्रिकोण जो कि छोटे सबट्री बॉक्स में फिट नहीं होंगे) को संतुलित करना होगा।

कुछ उपकरण और लिंक:

त्रिभुज - बाधा बहुभुज त्रिभुज

Quadtrees - स्रोत उदाहरणों के साथ

स्टोनी ब्रुक रिपॉजिटरी - डेटा संरचनाएं और डिस्क्रीट ज्यामिति

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.