मैं रनटाइम पर गतिशील वातावरण में 2d नेविगेशन जाल कैसे बना सकता हूं?


9

इसलिए मैं समझ गया हूं कि पथ-खोज के लिए ए * का उपयोग कैसे करें, और मैं इसे ग्रिड पर उपयोग करने में सक्षम हूं। हालांकि, मेरी खेल की दुनिया बहुत बड़ी है और मेरे पास कई दुश्मन हैं जो खिलाड़ी की ओर बढ़ रहे हैं, जो एक लक्ष्य है, इसलिए एक ग्रिड सिस्टम पथ-खोज के लिए बहुत धीमा है। मुझे एक नेविगेशनल जाल का उपयोग करके अपने नोड ग्राफ को सरल बनाने की आवश्यकता है।

मैं "कैसे" की अवधारणा को समझती हूं कि एक जाली काम करती है (कोने पर और नोड्स के माध्यम से एक रास्ता ढूंढना / और बहुभुज के किनारों के केंद्र)।

मेरा खेल गतिशील बाधाओं का उपयोग करता है जो रन-टाइम पर प्रक्रियात्मक रूप से उत्पन्न होते हैं।

मैं अपने सिर को इधर-उधर नहीं लपेट सकता कि किस तरह से एक ऐसा विमान लिया जाए, जिसमें कई बाधाएं हों और निम्नलिखित छवि की तरह नेविगेशन जाल के लिए चलने योग्य क्षेत्र को पॉलीगॉन में विभाजित करें।

नौसिखिया जाल

मैं कहाँ से प्रारम्भ करूँ? मुझे कैसे पता चलेगा कि जब वॉक-सक्षम क्षेत्र का एक खंड पहले से ही परिभाषित है, या इससे भी बदतर है, जब मुझे पता चलता है कि मुझे नक्शे के माध्यम से एल्गोरिथम "वॉक" के रूप में पहले से परिभाषित वॉक-सक्षम क्षेत्र को वश में करने की आवश्यकता है?

मैं नोडज में जावास्क्रिप्ट का उपयोग कर रहा हूं, अगर यह मायने रखता है।


1
जिस डायनामिक पार्टीशन को आप लागू करने का प्रयास कर रहे हैं, वह आपके मानचित्र तत्वों की बारीकियों पर निर्भर करता है। क्या आपके बाधा तत्व पूरी तरह से ग्रिड से बने आयतों से बने हैं जैसा कि आपके उदाहरण में दिखाया गया है? आयतों को घुमाया? अनियमित बहुभुज? या बहुत सारे घटता के साथ गैर-बहुभुज आकार? क्या आपके पास बाधाओं के आकार के लिए बिंदु / पाली डेटा है? यदि ऐसा है तो त्रिकोण, आयतों, विशेष रूप से उत्तल बहुभुज या उत्तल और अवतल बहुभुजों के मिश्रण के आकार का डेटा है?
मैथ्यू आर

@ मैथ्यू मेरी दुनिया उत्तल बहुभुज बाधाओं से बनी है, कोई वक्र और कोई अवतल बहुभुज नहीं। प्रत्येक बाधा को वेक्टर ऑब्जेक्ट्स द्वारा दर्शाए गए कोने के साथ बहुभुज ऑब्जेक्ट के रूप में संग्रहीत किया जाता है।
स्टीफन

1
इसके लायक क्या है, मैं इस पत्र के आधार पर एक समाधान पर काम कर रहा हूं: gradworks.umi.com/3493710.pdf यदि मैं सफल हूं तो मैं अपना समाधान पोस्ट करूंगा।
स्टीफन

1
नेविगेशन जाल वहाँ नहीं है 100% आपको बताएं कि क्या आप कहीं जा सकते हैं या नहीं, यह सिर्फ चलने योग्य क्षेत्रों की एक मूल रूपरेखा है, आपको अभी भी गतिशील वस्तुओं के खिलाफ टकराव की जांच करना है, संपादित करें: बहुत ज्यादा रे ने क्या कहा
dreta

@Stephen - लंबी टिप्पणी उत्तर देखें ।
मैथ्यू आर

जवाबों:


3

@ स्टेफेन - लंबी टिप्पणी - यह कागज ऐसा लगता है कि जब मेरे पास कुछ समय हो तो यह पढ़ने लायक हो सकता है। मूल रूप से मैंने जो सुझाव दिया है वह हर्टेल-मेहलॉर्न अल्गोरिथम की तर्ज पर कुछ है जो कागज में उल्लिखित है (इस विशिष्ट एल्गोरिथ्म के लिए एक संदर्भ यहां पाया जा सकता है http://www.bringyou.to/compgeom/ ) इसके अलावा कोनों में गठित कई छोटे त्रिभुजों की घटनाओं को कम करने के लिए कुछ पक्षों के नक्शे की संख्या (खेल क्षेत्र की सीमा के बाहर) को उप-विभाजित करना। वे छोटे त्रिकोण समस्याग्रस्त हो सकते हैं क्योंकि वे उस चीज़ से छोटे हो सकते हैं जो आप के लिए पथ-खोज के लिए बेहतर है। हर्टेल-मेह्लहॉर्न एक त्रिकोणीय विभाजन द्वारा उत्पादित बहुभुज की कमी के लिए है यदि आप यहां रुचि रखते हैं तो त्रिकोणासन पर अधिक है:http://www.personal.kent.edu/~rmuhamma/Compgeometry/MyCG/PolyPart/polyPartition.htm

इसके अलावा, यदि आप पहिया को फिर से नहीं रोकेंगे, तो मुझे लगता है कि यह पुस्तकालय वास्तव में आपकी जरूरत का हर काम करेगा: http://code.google.com/p/polypartem/ । यह कई प्रकार के विभिन्न विकल्पों में से एक के साथ त्रिकोणीयकरण और कटौती को बेहतर बनाता है, जिसमें हर्टेल-मेह्लहॉर्न शामिल हैं। यह एक एमआईटी लाइसेंस है, जिसका अर्थ है कि अगर यह एक मुद्दा है तो इसका उपयोग बंद-स्रोत और वाणिज्यिक परियोजनाओं के लिए किया जा सकता है।

यदि आप अपने स्वयं के कार्यान्वयन पर काम करने का निर्णय लेते हैं, तो मुझे यह देखना अच्छा लगेगा कि आप क्या करते हैं।


1
शानदार जवाब, @ मैथ्यू। और आपको उस कागज को जरूर पढ़ना चाहिए! एक महान तकनीक का पालन करना आसान है और बताते हैं (विशेष रूप से परिशिष्ट ए जो एजेंट आधारित खोज / जाल की पीढ़ी के बारे में बात करता है)। मैं जावास्क्रिप्ट के लिए इस एल्गोरिथ्म के एक संस्करण को कोड कर रहा हूं, और यह अच्छी तरह से आ रहा है। जब यह हो जाएगा मैं इसे एक उत्तर के रूप में पोस्ट करूँगा।
स्टीफन


@ स्टेफेन मैं एक जावास्क्रिप्ट संस्करण की तलाश में हूँ
अपोलो

6

एक जाल के बजाय, आप बस एक पदानुक्रमित ए * दृष्टिकोण पर विचार कर सकते हैं। एक जाल का सबसे बड़ा लाभ खेल की दुनिया से निपटने में है जो ग्रिड से जटिलता को कम करने के बजाय ग्रिड संरेखित नहीं है।

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

पदानुक्रमित दृष्टिकोण परिमाण के बेहतर प्रदर्शन के आदेश देगा, जबकि सबसे अच्छा एक जाल केवल आपको एक छोटे से रैखिक सुधार देने वाला है।

अनुभवहीन दृष्टिकोण बस अपनी दुनिया को एक्स एक्स एक्स ग्रिड ग्रिड से बड़ी संख्या में विभाजित करना है, उनके बीच कनेक्टिविटी की जानकारी उत्पन्न करें (उदाहरण के लिए, 3x1 से 2x2 के बीच चंक 2x1 के बीच एक रास्ता है, और औसत पथ की दूरी क्या है) ।

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


1
मुझे आगे समझाना चाहिए: मेरा खेल ग्रिड संरेखित नहीं है। मैं एक 800 x 600 पिक्सेल क्षेत्र में एक ग्रिड का निर्माण कर रहा था, प्रत्येक पिक्सेल ग्रिड पर एक स्थान है (मैं अभी भी ए * पता लगा रहा था, इसलिए मैं अभी तक इस के प्रदर्शन के बारे में नहीं सोच रहा था)। मेरे पास ऐसी बाधाएँ हैं जो उपरोक्त उदाहरण की छवि के समान सरल नहीं हैं, मैं सिर्फ समस्या को चित्रित करने का प्रयास कर रहा था। जाहिर है कि इस तरह के खेल के मैदान को संशोधित करने की आवश्यकता है, और कुछ शोध के बाद मुझे लगता है कि एक नौसेना जाल जाने का सही तरीका होगा।
स्टीफन

3

मुझे लगता है कि आप इसे ओवरकंप्लीकेट कर सकते हैं। आपको शायद मक्खी पर नेविगेशन मेश उत्पन्न करने की आवश्यकता नहीं है। इसके बजाय आपके आधार दुनिया के लिए एक स्थिर नेविगेशन जाल है।

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

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