2 डी ग्रिड मानचित्र पर सड़क / नदी निर्माण


12

यह एक नौसिखिया सवाल है, लेकिन यहाँ यह जाता है:

मेरा नक्शा 2d ग्रिड है, और मैं सड़कों और नदियों को उत्पन्न करना चाहता हूं। शुरुआती से अंत तक का मार्ग टाइलों की संख्या में इष्टतम मार्ग नहीं होना चाहिए। इसके बजाय, उनके पास एक निश्चित स्तर की यादृच्छिकता (बदल जाती है) होनी चाहिए।

क्या इस तरह की चीज के लिए एक मानक एल्गोरिथ्म है?

चीयर्स!

अपडेट करें:

यह ग्रिड पर भार के साथ खेलने, और jgraphy लाइब्रेरी का उपयोग करके एक छोटी पथ एल्गोरिथम (बेलमैन-फोर्ड) को लागू करने का परिणाम है। मैं आखिर डोनट्ज़ के जवाब के साथ गया।

http://pastebin.com/AGQGK5ik


क्या नक्शे में कोई बाधाएं हैं?
MichaelHouse

अभी तक, नदी को रखा जाने वाला पहला अवरोध नहीं होगा।
मार्कोस फ्रैगाकिस

जवाबों:


18

आप ए * का उपयोग करके इष्टतम पथ उत्पन्न कर सकते हैं, फिर इसे मध्य बिंदु विस्थापन के साथ विकृत कर सकते हैं।

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

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

यह सुनिश्चित करने के लिए ध्यान रखें कि यदि आपके नक्शे में बाधाएं हैं, तो आप प्रत्येक पुनरावृत्ति के बाद जांचते हैं कि आप उन बाधाओं से पार तो नहीं हैं।

एक अन्य तरीका यह होगा कि इष्टतम रास्ता खोजने के बाद पेर्लिन का शोर उत्पन्न किया जाए , फिर उत्पन्न शोर के आधार पर अपने बिंदुओं को स्थानांतरित करें। उदाहरण के लिए, इस शोर का उपयोग करना:

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

फिर लाल रंग में इष्टतम पथ और नीले रंग में स्थानांतरित पथ के साथ दिखाएं:

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

ध्यान दें कि कैसे शिफ्ट किया गया मार्ग शोर के गहरे क्षेत्रों में "बस गया" है। उसी तरह एक नदी घाटी से होकर बह सकती है।

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


1
आप इस बिंदु को शोर के आधार पर कैसे स्थानांतरित करते हैं?
खोई

1
यह इस बात पर निर्भर करता है कि आप शोर और उत्पन्न लाइन का भंडारण कैसे कर रहे हैं। आप केंद्र में सबसे पहले / सबसे कम शोर लंबवत रेखा पर पा सकते हैं, फिर केंद्र और छोर के बीच के मध्य बिंदुओं पर, और इसी तरह।
MichaelHouse

3

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


2

जब ऊंचाई एक कारक हो तो क्या होगा? मैं डायमंड स्क्वायर एल्गोरिथ्म के साथ एक ऊंचाई बना सकता हूं। मैं प्रत्येक टाइल में कुछ यादृच्छिक पानी जोड़ने के बारे में सोच रहा था और फिर पानी के माध्यम से और निचली ऊंचाई तक पानी ले जा रहा था जब तक कि यह सब व्यवस्थित नहीं हो गया, लेकिन यह धीमा होगा, और शायद झीलों को बनाएगा, न कि नदियों को।

मैं प्रत्येक टाइल के लिए मानदंडों को देखने के बारे में भी सोच रहा था। यदि 2 मानदंड एक-दूसरे की ओर इंगित करते हैं, तो यह एक घाटी होनी चाहिए। पानी एक घाटी में इकट्ठा होगा। यदि वे एक ही दिशा में या एक दूसरे से दूर की ओर इशारा करते हैं, तो जल अभ्यारण्य एकत्र नहीं करेगा। यह संभवतः पुनरावृत्ति विधि से तेज होगा, लेकिन झीलों, केवल नदियों को नहीं बना सकता है। मुझे इसके साथ चारों ओर खेलना होगा ताकि टाइल के प्रत्येक उदाहरण को एक नदी में एक दूसरे की ओर मोड़ सकें।


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