एक असमान ग्रहीय सतह पर पथप्रदर्शक


16

मेरा सवाल यह है कि असमान ग्रहीय सतह पर पाथफाइंडिंग के लिए सबसे अच्छा तरीका क्या होगा?


पृष्ठभूमि की जानकारी

मैंने विस्थापन मानचित्रण से एक ग्रह बनाया है जिसमें 6 गोलाकार विमान हैं। विमानों ने शुरू में एक गोलाकार आकृति में प्रक्षेपित होने से पहले एक घन बनाया।

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

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

मेरे प्रश्न को बेहतर ढंग से व्यक्त करने में मदद करने के लिए यह मेरा वर्तमान ग्रह है:

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


2
आपको इस वीडियो में प्लेनेटरी एनीहिलेशन से दिलचस्पी हो सकती है । वे ऐसा करते हुए दिखाई देते हैं जैसे आप एक घन से दुनिया को लपेटते हैं और उसके चारों ओर खोजते हैं। यह वास्तव में एक उत्तर नहीं है, लेकिन आप देख सकते हैं कि वे एक क्षेत्र पर पथ-खोज के अनुकूलन के लिए कुछ अन्य रणनीतियों के साथ ए * का उपयोग कर रहे हैं। पथ खोज बिट 24:30 पर शुरू होता है ।
MichaelHouse

@ Byte56 इस लिंक के लिए धन्यवाद, लागत के लिए वास्तव में दिलचस्प दृष्टिकोण, जब वह समाप्त हो जाए तो उस खेल को देखने के लिए इंतजार नहीं कर सकता!
कैयस यूजीन

जवाबों:


12

ऐसा लगता है कि आप पहले ही अपने प्रश्न का उत्तर दे चुके हैं। A * संभवतः सबसे अच्छा तरीका है। हां, यह आपके द्वारा वर्णित तरीके से उपयोग किया जा सकता है, जिसमें पहाड़ों से बचने के लिए ऊंचाई की जानकारी का उपयोग करना शामिल है। जब तक आप अपनी दुनिया की सतह पर किसी भी ग्रिड के बारे में जानकारी प्राप्त करने में सक्षम होते हैं, तब तक कोई कारण नहीं है कि आप इसे ए * हेयुरिस्टिक में उपयोग नहीं कर सकते।

अंत में, आप अपने प्रश्न के अंत में पथ खोज के साथ पथ भ्रमित कर रहे हैं। पथ खोज गुरुत्वाकर्षण की परवाह नहीं करती है, जब तक कि आप इसे एक अनुमानी के रूप में नहीं जोड़ते हैं और जब से आप किसी ग्रह की सतह पर हैं, गुरुत्वाकर्षण अनिवार्य रूप से पूरी सतह पर समान होगा। कई खेलों में एक साथ गति होती है, मुझे लगता है कि आप ऐसा नहीं कर सकते।

मूल रूप से हम लाल से नीले रंग में जाने के लिए नक्शा बनाना चाहते हैं, क्योंकि यह एक गोले पर है।

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

चूंकि ए * अक्सर अपने वर्तमान नोड के लिए पड़ोसी हो रहा है, आप आसन्न नोड प्राप्त करने के लिए आसानी से फ़ंक्शन का एक सेट बना सकते हैं। उदाहरण के लिए, getXPlus(), getXMinus(), getZPlus()और पर इतना। ये फ़ंक्शन वर्तमान नोड लेंगे और नोड को फ़ंक्शन नाम द्वारा निर्दिष्ट दिशा में वापस कर देंगे।

अधिकांश समय ये कार्य केवल एक मूल्य वृद्धि कर सकते हैं और किए जा सकते हैं, हालांकि, किनारों पर, यह बदल जाएगा।

आप अपने घन की सतह को 2D समन्वय प्रणाली में मैप करना चाहते हैं। हालाँकि, आप ऐसा करते हैं, उन्हें लाइन में नहीं लगना है, बस प्रत्येक ग्रिड को एक विशिष्ट एक्स, वाई कोऑर्डिनेट करना है।

अब जब एक किनारे पर, और आसन्न ग्रिड स्थान प्राप्त करना जरूरी नहीं है कि बस निर्देशांक बढ़ाना होगा। हमें यह पता लगाना होगा कि हम किस चेहरे की ओर बढ़ रहे हैं और उस चेहरे के निर्देशांक पर स्विच कर रहे हैं।

उदाहरण के लिए, यहां XPlus को समन्वित होने से X और Y दोनों निर्देशांक बदल जाएंगे क्योंकि हम एक नए चेहरे पर एक नए ग्रिड स्थान पर जा रहे हैं। हरी रेखा दो चेहरों के बीच एक धार का प्रतिनिधित्व करती है।

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

अब ये सिर्फ वैश्विक निर्देशांक हैं, एक आंतरिक स्थानीय समन्वय प्रणाली का उपयोग करना आसान हो सकता है, 3 डी आयाम के साथ जो वर्तमान में आप जिस घन चेहरे का प्रतिनिधित्व करते हैं।

किसी भी तरह से, आपको घन के चेहरे पर प्रत्येक ग्रिड स्थान के लिए एक अद्वितीय समन्वय करने की आवश्यकता है। उनके बीच ट्रैवर्सिंग इस बात पर निर्भर करेगी कि आप समन्वय प्रणाली को कैसे लागू करते हैं। आपको यह जानना होगा कि उस क्षेत्र के मानचित्र में मानचित्रों का समन्वय कहाँ से किया जाता है।

यह सब अंततः दूर होना चाहिए ताकि आपको इसके बारे में पता भी न चले।


प्रतिक्रिया के लिए चीयर्स। मुझे लगता है कि मैं जो संघर्ष कर रहा हूं, वह प्रत्येक विमान को एक अलग ग्रिड के साथ है। क्या आपके पास कोई सुझाव (या आगे पढ़ने) है कि सीमों से कैसे निपटना है, मुझे लगता है कि मैं गणितीय रूप से अपने "क्यूब" को प्रकट करूंगा, सभी ग्रिडों को संयोजित करके उस डेटासेट का उपयोग करके पथ की गणना करूंगा?
कायुस यूजीन

वास्तव में यह सिर्फ किनारों के बारे में आपको चिंता करने की आवश्यकता है। यह आसानी से एक आवरण समारोह (एक आवरण समारोह में अपने घन लपेटकर, जो आपकी दुनिया को लपेटता है ...) द्वारा हल किया जाता है। आप क्यूब को एक सपाट सतह में सार कर सकते हैं जो लपेटता है। आसन्न ग्रिड स्थान प्राप्त करने के लिए फ़ंक्शन बनाएँ, getXPlus () XPlus दिशा में ग्रिड प्राप्त करेगा, इससे कोई फर्क नहीं पड़ता कि यह चेहरों के बीच की सीमा पर है, फ़ंक्शन सिर्फ चेहरे को स्विच करेगा और उपयुक्त ग्रिड जानकारी लौटाएगा।
MichaelHouse

तह क्यूब पर पथ खोजने के साथ एकमात्र अशुद्धि यह है कि कोने तिरछे हैं और इसलिए किनारों की लंबाई अलग-अलग है। यह संभव है कि इससे परिणामस्वरूप पथों में ध्यान देने योग्य अंतर नहीं होगा और अन्यथा आप केवल लंबाई को ध्यान में रख सकते हैं।
दानीझर

1
यहां समझने वाली महत्वपूर्ण बात यह है कि A * आवश्यक रूप से एक विमान पर कार्य नहीं करता है; यह एक ग्राफ पर संचालित होता है। यद्यपि प्रत्येक घन चेहरे के भीतर, नोड व्यवस्थित होते हैं और ग्रिड में जुड़े होते हैं, घन के किनारों पर नोड कनेक्शन भी होते हैं।

1
@ Byte56 महान जवाब के लिए धन्यवाद, मैंने एक समाधान निकालना शुरू कर दिया है, हालांकि मैंने थोड़ी सी भी रोक लगा दी है। शायद मुझे गलतफहमी हुई है मैं stackoverflow पर पर एक प्रश्न पोस्ट किया है के रूप में मैं अपने एक गणित के अधिक / प्रोग्रामिंग समस्या महसूस किया stackoverflow.com/questions/16089074/...
सायस यूजीन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.