मैं 2 डी टकराव का पता लगाने के लिए क्वाड्री का उपयोग करने की कोशिश कर रहा हूं, लेकिन मैं इसे कार्यान्वित करने के तरीके पर थोड़ा स्टंप हूं। सबसे पहले, मेरे पास एक क्वाड्री होगी जिसमें चार उपट्री (प्रत्येक चतुर्भुज का प्रतिनिधित्व करने वाला) होता है, साथ ही ऑब्जेक्ट्स का एक संग्रह होता है जो एक एकल उप-भाग में फिट नहीं होता है।2 डी टकराव का पता लगाने के लिए क्वाड्री
- वर्तमान नोड में किसी भी वस्तुओं के साथ टकराव के लिए वस्तु की जाँच करें:
जब पेड़ में टक्कर के लिए एक वस्तु की जाँच, मैं कुछ इस तरह (QuadTree for 2D collision detection करने के लिए धन्यवाद) करना होगा।
- किसी भी उप-धारा के लिए जिसका स्थान वस्तु को ओवरलैप करता है, रिकर्स करता है।
एक quadtree पेड़ के भीतर सभी टकराव ढूंढने के लिए:
- चेक वर्तमान नोड में एक दूसरे को वस्तु के खिलाफ वर्तमान नोड में प्रत्येक वस्तु।
- प्रत्येक उपखंड के खिलाफ वर्तमान नोड में प्रत्येक ऑब्जेक्ट की जांच करें।
एक quadtree में सम्मिलित करने के लिए: वस्तु कई subtrees में फिट बैठता है
- है, तो वर्तमान नोड में जोड़ने, और लौट आते हैं।
- अन्यथा, जो भी उपट्री में शामिल है उसे पुन: दर्ज करें। प्रत्येक सबट्री में
- recurse:
एक quadtree अद्यतन करने के लिए।
- यदि वर्तमान नोड में कोई भी तत्व वर्तमान पेड़ में पूरी तरह से फिट नहीं होता है, तो इसे पैरेंट पर ले जाएं।
- यदि वर्तमान नोड में कोई तत्व उपट्री में फिट बैठता है, तो उसे उपट्री में डालें।
क्या यह ठीक है? क्या यह सुधार किया जा सकता है?
इसे जिस तरह से आप वर्णन करते हैं उसे कार्यान्वित करें, मैंने इसे इस तरह से किया है और जिस तरह से डेव ओ ने इसे किया है और यह कोड आसान है और यह तेज़ है। उन सभी पत्तियों का ट्रैक रखने के लिए अधिक सूचियों का प्रबंधन करना, जो आपके टिकाऊ ओवरहेड जोड़ते हैं। स्रोत (जावा में) मेरे संस्करणों में से एक है: [स्टीरियो] (https://github.com/ClickerMonkey/steerio/blob/master/Java/src/org/magnos/steer/spatial/quad/SpatialQuadNode। जावा) – ClickerMonkey