एक चतुर्भुज में बड़ी ज्यामितीय वस्तुओं को संग्रहीत करने के लिए कौन सी विधि पसंद की जाती है?


15

जियोमेट्रिक ऑब्जेक्ट्स को क्वाडट्री (या ऑक्ट्री) में रखते समय, आप उन वस्तुओं को रख सकते हैं जो कुछ तरीकों से एक नोड से बड़ी हैं:

  1. प्रत्येक पत्ती में वस्तु के संदर्भ को रखना जिसके लिए यह निहित है
  2. ऑब्जेक्ट के संदर्भ को सबसे गहरे नोड में रखना जिसके लिए यह पूरी तरह से निहित है
  3. दोनों # 1 और # 2

उदाहरण के लिए:

यहाँ छवि विवरण दर्ज करें

इस छवि में, आप या तो चारों पत्तों के नोड्स (विधि # 1) या केवल रूट नोड (विधि # 2) या दोनों (विधि # 3) में सर्कल रख सकते हैं।

क्वाडट्री को क्वेरी करने के प्रयोजनों के लिए, कौन सी विधि अधिक सामान्य है और क्यों?


1
निश्चित रूप से यह एक संदर्भ होना चाहिए। मैं यह पूछने का इरादा करता हूं कि क्या क्वाडट्री को क्वेरी करने के प्रयोजनों के लिए, पत्तियों, गैर-पत्तियों या दोनों में संदर्भ होना चाहिए।
nsantorello

पीएस ने प्रश्न को स्पष्ट करने के इरादे से उम्मीद जताई।
nsantorello

आप किस क्वेरी का समर्थन करने का प्रयास कर रहे हैं?
जो

@ मैं विशेष रूप से टकराव का पता लगाने, स्थानिक अनुक्रमण, और क्षेत्र / फ्रुम कुलिंग में रुचि रखता हूं।
nsantorello

1
@nsantorello नियम अलग-अलग हो सकते हैं, जिनके आधार पर आप उन प्रश्नों का समर्थन करना चाहते हैं, लेकिन टक्कर का पता लगाने के लिए यह बहुत प्रासंगिक लगता है: stackoverflow.com/questions/4434335/…
जो

जवाबों:


8

यह मानते हुए कि आप एक संदर्भ का संग्रह कर रहे हैं, न कि वस्तु का, यह आपके आवेदन के आधार पर इसे अलग तरीके से करने के लिए समझ में आता है।

उदाहरण के लिए, यदि आप इस (ठोस) सर्कल के साथ टकरावों की गणना कर रहे थे और टक्कर निचले बाएं कोने में हो रही थी, तो यह आसान होगा कि आप उस पत्ती से सीधे उस पत्ती में सभी ज्यामिति तक पहुंच सकें (विधि # 3) (पेड़ को ऊपर की ओर झुकाने और विरासत में मिली ज्यामिति निर्धारित किए बिना)। लेकिन, यह कहें कि आप रेखांकन ज्यामिति के लिए सिर्फ क्वाडट्रैस का उपयोग कर रहे थे, आप विधि # 1 का उपयोग करना चाहते हैं, क्योंकि यह केवल नोड में कुछ आकर्षित करने के लिए समझ में आता है जिसके लिए यह पूरी तरह से निहित है (यह पता लगाना अधिक कठिन होगा कि कौन सा भाग है प्रत्येक पत्ती नोड के लिए आकर्षित करने के लिए और कहाँ)।

जहां तक ​​अधिक सामान्य बात है, क्वाडट्रीज के साथ मेरा एकमात्र अनुभव एक एन-बॉडी सिमुलेशन लिखने के साथ है जहां ज्यामितीय वस्तुएं वास्तव में सिर्फ ऐसे बिंदु थीं जिनका कोई क्षेत्र नहीं था, इसलिए मैं निश्चित रूप से इसका जवाब नहीं दे सकता।


धन्यवाद Rafe, मुझे लगता है कि आप सही हैं कि यह आवेदन पर निर्भर करता है।
nsantorello

6

क्वाडट्री के फायदों में से एक यह है कि यदि आप एक नोड को अपने बच्चे के नोड्स में विभाजित नहीं करते हैं, तो बच्चे के सभी नोड्स में समान जानकारी होगी। यह आपको बहुत सारी मेमोरी बचा सकता है और प्रोसेसिंग को तेज कर सकता है।

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

दूसरी ओर, यदि आपके पास लीफ नोड्स में ऑब्जेक्ट्स हैं, तो यह आपको झूठी सकारात्मक (ऑब्जेक्ट्स जिन्हें आपको चौराहे के लिए जांचना है, समाप्त करने में मदद कर सकता है, क्योंकि वे सही नोड में हैं, लेकिन यह वास्तव में इंटरसेक्ट नहीं है)।

इसलिए, मुझे लगता है कि दोनों दृष्टिकोणों के अपने उपयोग हैं और मुझे यकीन नहीं है कि किस तरह का उपयोग करना है।

मैं शायद दृष्टिकोण # 3 का उपयोग नहीं करूंगा, क्योंकि मुझे इसके बारे में कोई सकारात्मकता नहीं दिख रही है।

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