एक प्रक्रियात्मक रूप से उत्पन्न नक्शे में कैसे खण्ड और पट्टियाँ निर्धारित की जा सकती हैं?


40

मुझे वेरोनोई कोशिकाओं का उपयोग करके एक प्रक्रियात्मक रूप से उत्पन्न नक्शा मिला है, एक परिभाषित समुद्र स्तर और एक विश्वसनीय ऊंचाई के नक्शे के साथ।

वर्तमान

अब तक, मैं कुछ भौगोलिक विशेषताओं को लेबल करने में सफल रहा हूं: भूमि, महासागर, झीलें, नदियाँ, मुहाने, संगम, पहाड़ और बायोम। बायोम में टुंड्रा, बोरियल वन, घास के मैदान और समशीतोष्ण वन शामिल हैं। वहाँ भी कुछ अन्य बायोम हैं, लेकिन मेरे उद्देश्यों के लिए वे अभी महत्वपूर्ण नहीं हैं।

मैं बेज़ को लेबल करना चाहता हूं, और बाद में स्ट्रैच करता हूं, लेकिन मैं ठीक से ऐसा करने के नुकसान पर हूं। एक खाड़ी पानी का एक तटीय, तटीय शरीर है जो सीधे समुद्र से जुड़ता है।

जलडमरूमध्य एक प्राकृतिक रूप से निर्मित, संकीर्ण जलमार्ग है जो समुद्र के दो हिस्सों को जोड़ता है। असल में, जहां जमीन के दो टुकड़े लगभग छूते हैं और दोनों तरफ महासागर होते हैं। जिसे "चैनल" भी कहा जाता है।

सुविधाओं के निर्धारण के लिए, मैं इस तरह से किसी भी सुविधा के माध्यम से लूप कर सकता हूं:

for each (var feature:Object in geography.getFeaturesByType(Geography.LAND))
  // loop through lands
  for each (var cell:Cell in feature.cells)
  // loop through cells
    for each (var neighbor:Cell in cell.neighbors)
    // loop through a cell's neighbors
      trace(neighbor.hasFeatureType(Geography.LAND));

8
मैं एक बेज़ियन क्लासिफायरियर की सलाह देता हूं।
15

1
@ सनकी यह "बे" पर एक दंड है या यह एक गंभीर सुझाव है? यदि उत्तरार्द्ध, आपको इस बारे में एक उचित उत्तर लिखना चाहिए।
फिलिप

मुझे 99% पसंद है, यकीन है कि वह मजाक कर रहा है।
ओलिन किर्कलैंड

जवाबों:


29

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

इस तस्वीर में, लाल और बैंगनी डॉट्स दो उम्मीदवार बिंदुओं को दिखाते हैं और हरे रंग की रेखा बिंदुओं के बीच का समुद्र तट है। सिनुओसिटी उन दो लंबाई का अनुपात है:

एक बे का उदाहरण

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

मेरे अनुभव में, इन दो उपायों का एक संयोजन मज़बूती से पहचानने के लिए सबसे अच्छा था कि लोग किस रूप में देखते हैं।

ध्यान दें कि यह बिंदुओं का भी पता लगाएगा। केवल खण्ड खोजने के लिए, आपको यह जाँचना होगा कि खाड़ी के "अंदर" में पानी है और भूमि नहीं है। ऐसा करने का एक त्वरित और आसान तरीका दो बिंदुओं के बीच की रेखा के मध्य बिंदु की जांच करना है कि क्या यह पानी है। (यह मूर्ख बनाया जा सकता है लेकिन आम तौर पर पर्याप्त है।)

एक संबंधित समस्या खाड़ी के "मुंह" की पहचान करना है - यानी, दो बिंदुओं के लिए सबसे अच्छा विकल्प जो खाड़ी में उद्घाटन को चिह्नित करता है। आमतौर पर आपके पास "मुंह" के लिए उम्मीदवारों का एक समूह होगा। ऊपर दिए गए उदाहरण के नक्शे में, आप उस खाड़ी का मुंह आगे या बाहर रख सकते हैं। सामान्यतया यह बहुत अधिक मायने नहीं रखता है, लेकिन एक अच्छा अनुमान जो अच्छी तरह से काम करता है वह है मुंह के पार सीधी रेखा की दूरी को कम करना।

मैंने अभी तक जलडमरूमध्य नहीं बनाया है, लेकिन मेरा अंतर्ज्ञान किसी अन्य तट पर निकटतम बिंदु को खोजने के लिए समुद्र तट के साथ बिंदुओं की जांच करना है; अगर वह कुछ निर्धारित सीमा के तहत है तो यह एक स्ट्रेट है।


3
मुझे पता होना चाहिए कि ड्रेगन एबाउंड के पास मेरे लिए आवश्यक उत्तर होंगे।
ओलिन किर्कलैंड

48

रुचि की विशेषताओं को अलग करने के लिए छवि प्रसंस्करण परिवर्तनों का उपयोग करते हुए यहां एक मोटा विचार है:

  1. सभी महासागर कोशिकाओं का मुखौटा बनाने के लिए एक महासागर सेल से बाढ़ भराव लागू करें। आपकी नदियों को कैसे स्थापित किया जाता है, इसके आधार पर, आपको समुद्र में अंतर्देशीय बहने से बचाने के लिए अतिरिक्त ऊंचाई या निकासी मानदंड की आवश्यकता हो सकती है। ;)

    ओशन मास्क

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

    यहाँ मैंने कुछ समय के लिए माध्य फ़िल्टर लगाया। सेलुलर ऑटोमेटा एक शोर इनपुट से चिकनी आकृतियों को नष्ट करने का एक और लोकप्रिय तरीका है।

    चिकनी तटरेखा

  3. मुखौटा को एक दूरी के क्षेत्र में बदल दें, जहां प्रत्येक कोशिका चिकनी समुद्र तट से अपनी दूरी संग्रहीत करती है।

    दूरी क्षेत्र

अब हम कुछ आशाजनक फीचर हाइलाइट देखते हैं। एक हस्ताक्षरित दूरी क्षेत्र में, दोनों किरणें और पट्टियाँ तेज लकीर के रूप में दिखाई देती हैं, दूरी दूरी के किनारे तक गिरती है। हम इन लकीरों को हटाने के लिए एक किनारे का पता लगाने वाले फिल्टर का उपयोग कर सकते हैं:

हाइलाइट किया गया पुल

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

या, एक अन्य तरीका यह है कि प्रत्येक द्वीप को एक आईडी (जुड़ा घटक खोज) सौंपा जाए, फिर जब आप अपनी दूरी क्षेत्र बना रहे हों, तो दूरी सीमा के साथ-साथ "निकटतम द्वीप आईडी" का प्रचार करें। एक बे या इनलेट तब दोनों तरफ एक ही भूभाग से सटे पानी में एक रिज है, जबकि एक चैनल एक रिज है जो दो अलग-अलग लैंडमास से सटे पानी को अलग करता है।

यदि आप उदाहरण के लिए अत्यधिक संकीर्ण / विस्तृत पट्टियों को बाहर करने की आवश्यकता है, तो आपको यह नियंत्रित करने के लिए न्यूनतम और अधिकतम दूरी-से-किनारे या लंबाई-से-कठोर अवरोध सेट कर सकते हैं।


9
यह वास्तव में अच्छा लग रहा है, और शायद ग्राफिकल प्रतिनिधित्व के बजाय विभिन्न चरणों को लागू करने के लिए सेल संरचना का उपयोग करके सीधे काफी ऊपर तक फैलाया जा सकता है!
क्वेंटिन

7
दूसरा तरीका (प्रत्येक विशिष्ट भूमाफिया को एक आईडी देना और इस आधार पर भेद करना कि क्या यह पानी के शरीर के दोनों तरफ एक ही भूभाग है) ऐसा लगता है कि सबसे आसान काम है ..
मोंटी हार्डर

"लैंडमास आईडी" वैसे भी एक अच्छा विचार है, क्योंकि आपको द्वीप के नाम उत्पन्न करने के लिए मानचित्र लेबलिंग में भी इसकी आवश्यकता होगी।
एमएसल्टर्स

6

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

खाड़ी

  • कोई भी महासागर कोशिका जो केवल एक ही अन्य महासागर कोशिका से जुड़ती है
  • या: कोई भी महासागर कोशिका जो महासागर कोशिकाओं की तुलना में अधिक भूमि से जुड़ती है, सभी महासागर कोशिकाएं एक दूसरे के बगल में होती हैं
  • या: ऊपर के समान, लेकिन सीमा की लंबाई के आधार पर एक मानदंड के साथ (जैसे पानी सीमा के रूप में दो बार अधिक भूमि)

कंजूस

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

2
जब एक जलडमरूमध्य एक खाड़ी की ओर जाता है, तो इन दोनों को एक साथ fjord के रूप में लेबल किया जा सकता है।
फिलिपिंस

1
यदि कोशिकाएं बे / स्ट्रेट के आकार के सापेक्ष छोटी हैं, तो आपको तुरंत आसन्न पड़ोसियों से परे कोशिकाओं को देखने के लिए इसे प्रचारित करने की आवश्यकता हो सकती है।
DMGregory

हां, स्केलिंग एक मुद्दा है, और यह प्रभावित करेगा कि आप चीजों को कैसे परिभाषित करते हैं और 'सेल' घोषित करते हैं। कनाडा के नक्शे पर विचार करें, और निम्नलिखित की तुलना करें: हडसन बे, जेम्स बे, सेंट लॉरेंस की खाड़ी, और बे ऑफ फनी। वांछित संबंधित नाम प्राप्त करने के लिए आप इन नियमों को कैसे लागू करते हैं? - क्या न्यूफाउंडलैंड और नोवा स्कोटिया के बीच "स्ट्रेट" है?
लुकलेस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.