मुझे बताया गया है कि एक क्वाड ट्री मेरे खेल के लिए आदर्श डेटा संरचना है, लेकिन मुझे यह समझने में परेशानी हो रही है कि क्वाड ट्री के भीतर आकार कैसे काम करते हैं।
मैं यह जावास्क्रिप्ट में कर रहा हूं, लेकिन मुझे लगता है कि ये प्रश्न किसी भी भाषा में चौकोर पेड़ों पर लागू हो सकते हैं।
मुझे लगता है कि मैं ज्यादातर यह समझता हूं कि क्वाड ट्री में बेसिक (x, y) पॉइंट्स और पॉइंट इंसर्शन कैसे काम करता है, और यह कि मैं इसे पेपर पर कर सकता था।
यहाँ अंक के साथ मेरे प्रयोग की एक JSfiddle है।
एक मामले के अलावा, अंकों के साथ मेरे परीक्षण अपेक्षित रूप से काम कर रहे हैं।
लेकिन मेरा भ्रम तब शुरू होता है जब आयत जैसी आकृतियाँ शामिल होती हैं। जब आप आकार के साथ एक चौकोर पेड़ से प्राप्त कर रहे हैं, तो क्या यह आकार के प्रत्येक बिंदु की जांच करता है, और वे किस नोड में आते हैं? और कैसे आकार सम्मिलन भी काम करते हैं, जब यह प्रत्येक आकार के लिए (x, y, चौड़ाई, ऊंचाई) मान को स्वीकार करता है? क्या यह अन्य कोने बिंदुओं की गणना करने के लिए शुरुआती बिंदु से चौड़ाई / ऊंचाई का उपयोग करता है, जो तब उपयुक्त नोड में तिरस्कृत होते हैं? यदि एक सम्मिलित आकार चार नोड्स में फैला है, तो क्या उस आकृति का डेटा सभी चार नोडों में सहेजा गया है?
और जब एक पुनर्प्राप्ति विधि एक आकार को पैरामीटर (x, y, चौड़ाई, ऊंचाई) के रूप में स्वीकार करती है, तो वास्तव में क्या चल रहा है? क्या यह पहली बार देखा जा रहा है कि अगर यह डाला जाना है, तो आकार किस नोड में होगा, और फिर उन नोड्स की सभी वस्तुओं को पुनः प्राप्त करेगा?
मेरे पास एक JSfield है जो आकृतियों के साथ काम कर रहा है, लेकिन मैं अपने परीक्षण के परिणामों पर पूरी तरह से भ्रमित हूं। मुझे डुप्लिकेट ऑब्जेक्ट वापस मिल रहे हैं!
उदाहरण के लिए, लाल वर्ग उन मापदंडों के बराबर है जो मैं अपनी पुनर्प्राप्ति विधि में दर्ज कर रहा हूं। मुझे लगता है कि चूंकि यह लाल वर्ग सभी चार नोड्स में फैला है, इसलिए इसे क्वाड ट्री में हर वस्तु को वापस करना चाहिए! लेकिन यह नहीं है, और मुझे यह समझने में परेशानी हो रही है कि यह क्या करता है। मेरे पास कई अन्य परीक्षण हैं जो वर्तमान में टिप्पणी कर रहे हैं, लेकिन आप अधिक भ्रामक परिणाम देखने के लिए टिप्पणी कर सकते हैं और उन्हें चला सकते हैं!
बकौल, अगर मैं एक क्वाड ट्री के सभी बिंदुओं को वापस करना चाहता हूं, तो मैं यह कैसे करूंगा? सीमा के पूरे आकार के आकार का उपयोग करके एक पुनर्प्राप्त विधि? उदाहरण के लिए, (0, 0, कैनवस.उपभार, कैनवस.हाईट) को पुनः प्राप्त करें?
जावास्क्रिप्ट QuadTree पुस्तकालय मैं उपयोग कर रहा हूँ, कई अन्य स्रोतों द्वारा निर्दिष्ट किया गया है तो मुझे लगता है वास्तविक क्रियान्वयन सही और सम्मानित है।
मुझे लगता है कि क्वाड ट्री शब्दावली की गलतफहमी से मेरा बहुत भ्रम दूर हो सकता है। जैसे, वे आयामों के बजाय सीमा क्यों कहते हैं, जब एक "बिंदु" की चौड़ाई / ऊंचाई पैरामीटर भी होती है? क्या यह सम्मेलन / शॉर्ट-हैंड की बात है, या वे पूरी तरह से अलग अवधारणाएं हैं?
आपके समय के लिए धन्यवाद!
_stuckChildren
कोड में फ़ील्ड के संदर्भ देखें । आप इसे "सीमाओं के साथ आइटम पुनर्प्राप्त करने" में भी देख सकते हैं - यह हमेशा उन नोड्स को लाल करता है जो आपके द्वारा क्लिक किए गए नोड्स की सीमाओं को काटते हैं, रूट नोड तक सभी तरह से।