मैं एक प्रक्रियागत रूप से उत्पन्न दुनिया में फ़ीचर क्षेत्रों की पहचान कैसे कर सकता हूं?


26

मैं एक द्वीप का निर्माण कर रहा हूँ। मैं शास्त्रीय ऊंचाई के समाधान का उपयोग करता हूं: एक पहाड़ी-निर्माण कार्य के साथ, नक्शे के कोनों से बचकर, मैं ऊंचाई बनाता हूं। फिर, पेरलिन शोर मुझे बायोम को संभालने के लिए कुछ जलवायु चर देता है। अब, मुझे दो चुनौतियों का सामना करना पड़ रहा है, जो किसी न किसी तरह से जुड़ी हुई हैं:

  • बौना किले में, दुनिया की पीढ़ी के स्वच्छ पहलुओं में से एक यह है कि खेल कैसे "क्षेत्रों" को जानता है, और उन्हें नाम देता है, हालांकि वे आयताकार आकार नहीं हैं। मैं अपने जंगलों, अपनी नदियों, अपनी पहाड़ियों को "पहचान" करने में सक्षम होना चाहता हूं ... किसी भी विचार को मैं अपने नक्शे को स्कैन करने और इसके क्षेत्रों की व्याख्या करने के लिए किस तरह का एल्गोरिदम का उपयोग कर सकता हूं? और आप इसे कैसे स्टोर करेंगे? मैं "टाइल्स ऑब्जेक्ट" के वेक्टर के वेक्टर से बना एक मूल C ++ ग्राफ का उपयोग कर रहा हूं।

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

इस प्रश्न को थोड़ा बहुत अस्पष्ट माना जा सकता है, इसलिए इसे रीफ़्रैश करने का एक तरीका होगा: विभाजन के लिए कैसे (बिना संशोधन के?) एक प्रक्रियात्मक रूप से उत्पन्न दुनिया को गेमप्ले के लिए उपयुक्त क्षेत्रों में? आपकी सहायता के लिये पहले से ही धन्यवाद।


सुधार के लिए धन्यवाद, और मेरी अंग्रेजी की खराब गुणवत्ता के लिए खेद है :)
Raveline

आपकी अंग्रेजी बहुत अच्छी है, यह सिर्फ इतना है कि "शीर्षक" अधिमानतः StackExchange साइटों पर एक प्रश्न के रूप में प्रकाशित किया गया है।
dlras2

जवाबों:


21

अमितप विभिन्न क्षेत्रों को परिभाषित करने के लिए वाटरशेड का उपयोग करने का सुझाव देते हैं, जैसा कि बहुभुज मानचित्र पीढ़ी पर उनकी पोस्ट में बताया गया है । वाटरशेड को उसके डेमो का उपयोग करके एक मानचित्र बनाकर सबसे अच्छा देखा जाता है । सबडिवीड महाद्वीपों की मदद करने के लिए वाटरशेड का उपयोग करने का लाभ यह है कि यह तटरेखा के लिए लंबवत सीमा प्रदान करता है, जबकि पहाड़ आमतौर पर समानांतर सीमा प्रदान करते हैं।

यदि मैं भौगोलिक क्षेत्रों को विभाजित कर रहा था, तो मैं अपने मानचित्र पर विभिन्न बायोमों पर पहाड़ों, वाटरशेड और किनारे का पता लगाने के संयोजन का उपयोग करूंगा।

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


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

@ रेवलिन - यदि आप राजनीतिक सीमाओं का उपयोग करते हैं, तो यहां टिप्पणी करें और मुझे बताएं! मुझे यह देखना अच्छा लगा कि यह कैसे होता है।
dlras2

13

डैन रासमुसेन के जवाब में जोड़ने के लिए :

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

फिर भी, मैंने पाया कि मैंने जो कुछ भी उत्पन्न किया था, उससे बड़ी संरचनाएँ मैं चाहता था। वाटरशेड उन बड़ी संरचनाओं के निर्माण का एक प्रयास था, लेकिन मुझे बहुभुज को एक साथ समूहीकृत करने के अधिक तरीकों की कोशिश करने की आवश्यकता है। मुझे ऐसा कुछ नहीं मिला, जिससे मैं खुश हूं।

मुझे यकीन नहीं है कि बौना किले यह कैसे करते हैं। यह देखते हुए कि वे लोग कितने प्रतिभाशाली हैं अगर मुझे एक परिष्कृत "कंप्यूटर दृष्टि" एल्गोरिथ्म का प्रकार है तो मुझे आश्चर्य नहीं होगा।


मैं तर्क को समझता हूं, हालांकि मुझे यकीन नहीं है कि आपका रास्ता इतना आसान है ... चूंकि मेरी परियोजना काफी विनम्र है, इसलिए मैं कुछ परिष्कृत करने के लिए पैच लगाने की कोशिश करूंगा, लेकिन बहुभुज के बिना, क्योंकि इसका मतलब होगा एल्गोरिदम का अधिक अध्ययन करना। निहित। (पुनश्च: आपकी वेबसाइट प्रेरणा का एक अद्भुत स्रोत है और मैं इसे प्यार करता हूँ!)
रेवेलीन

3
बहुभुज मानचित्र पीढ़ी लेख शानदार था।
रैन

3

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

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

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