एक हेक्स मानचित्र में समान क्षेत्र उत्पन्न करें


13

उदाहरण के लिए एक बड़ा (X by Y) हेक्स मानचित्र, मैं इसे देशों से अनुकरण करने के लिए जुड़े हेक्स के एन क्षेत्रों में कैसे विभाजित कर सकता हूं?

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

जवाबों:


13

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

  1. खाली हेक्स के साथ मानचित्र को शुरू करने के लिए टाइल करें।
  2. यादृच्छिक पर एन हेक्स चुनें । ये प्रत्येक देश के लिए "जन का केंद्र" का प्रतिनिधित्व करेंगे।
  3. केंद्र हेक्स के साथ प्रत्येक हेक्स को टैग करें यह ( वोरोनोई आरेख ) के सबसे करीब है । देश मैं i'th केंद्र हेक्स के निकटतम सभी हेक्स का सेट है ।
  4. प्रत्येक देश के लिए बड़े पैमाने पर नए केंद्र की गणना करें।
  5. चरण 3 और 4 को दोहराएँ जब तक आप उत्पन्न क्षेत्रों को सुचारू करना चाहते हैं।

एक अच्छा दिखने वाला नक्शा बनाने के लिए आपको इसे बहुत लंबा नहीं चलाना पड़ेगा। इस उदाहरण के लिए केवल तीन पुनरावृत्तियों की आवश्यकता थी।


बहुत अच्छा है, और एक उदाहरण विशेष रूप से करने के लिए +1, लेकिन मैं एक छोटे से चिंतित है कि इन एक छोटे से कर रहे हैं होगा भी नियमित रूप से! उस ने कहा, परिणाम वास्तव में विशेष रूप से उस पैमाने पर बहुत खूबसूरत लगते हैं, और यह अन्य तरीकों को बोने का एक उत्कृष्ट तरीका भी है।
स्टीवन स्टडनिक

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

3

एक आसान तरीका है जिसे आप आज़मा सकते हैं।

  1. बेतरतीब ढंग से nहेक्स का चयन करें । प्रत्येक एक समूह शुरू करेगा।
  2. प्रत्येक समूह के लिए प्रारंभिक दिशा में एक यादृच्छिक दिशा में विस्तार करने का प्रयास करें।
  3. यदि चुने गए हेक्स के आसपास सभी हेक्स पर कब्जा कर लिया जाता है, तो टैप के रूप में चिह्नित करें, हेक्स को बदलें।
  4. तब तक दोहराएं जब तक कि प्रत्येक समूह 20 गुणा लंबा न हो या उसके पास विस्तार करने के लिए अधिक स्थान न हो (सभी हेक्स टैप किए गए)।

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


इसके अलावा, इस समस्या से संबंधित नहीं है, लेकिन बहुत, हेक्स के साथ काम करने के लिए बहुत उपयोगी है, इस पृष्ठ पर जाएं: http://www.redblobgames.com/grids/hexagons/#basics
यह एक ही स्थान पर हेक्स जानकारी की एक पूरी गुच्छा एकत्र करता है। एक अच्छा दृश्य।


यदि समूह बी को समूह ए में नोड्स देने के लिए समूह ए के लिए एक मैकेनिक को शामिल करना चाहिए, तो समूह ए की सीमाएँ और कहीं और जाने के लिए नहीं है। जब तक समूह ए में खोए हुए नोड्स को बदलने के लिए खाली जगह है। फिर इससे कोई फर्क नहीं पड़ता कि उन्होंने कहां से शुरुआत की। चूंकि यह "रिट्रीट" की तरह काम करता है।
MichaelHouse

मैं सोच रहा हूं कि शायद एक समय में एक देश शुरू करना, पहले कोने के समूहों का निर्माण करना, फिर किनारों को वह देना होगा जो मैं चाहता हूं। जब मैं घर पहुँचूँगी तब मैं इसकी कोशिश करूँगी।
MadCatPT

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

वास्तविक देशों में अक्सर नदियों या पहाड़ों पर सीमाएं होती हैं। जैसा कि आप एक यादृच्छिक दिशा में विस्तार कर रहे हैं, आप विस्तार की संभावना को कम करने की कोशिश कर सकते हैं यदि अगली हेक्स एक नदी या पहाड़ी रिज के दूसरी तरफ है।
13

@amitp अगर ओपी को उन कारकों की उम्मीद थी, तो शायद वह उनका उल्लेख करेगा। मैं नहीं मान रहा हूँ, सिर्फ मूल प्रीमियर के अंदर काम कर रहा हूँ।
पेटवाज़

2

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

मेरे सिर के ऊपर से, मैं एक बिंदु चुनने और वहाँ से बाहर जाने की सलाह दूंगा, जो आपके "बढ़ते देश" के भीतर एक यादृच्छिक टाइल उठाता है जिसमें एक निकटवर्ती टाइल है जो देश का हिस्सा नहीं है।

एक रणनीति पैटर्न का उपयोग एल्गोरिदम को बदलने के लिए किया जा सकता है जो इस बात पर निर्भर करता है कि आप किस प्रकार का देश चाहते हैं। http://en.wikipedia.org/wiki/Strategy_pattern यानी क्या आप एक पतली तटरेखा जैसा देश चाहते हैं? या आप कुछ ऐसा चाहते हैं जो अधिक गोल और सम्‍मिलित हो?

ग्राफ़ के गुण भी आपको "देश" के रूप में देखने के लिए जो चाहते हैं उसे ट्विक करने की अनुमति दे सकते हैं: http://en.wikipedia.org/wiki/Eccentricity_(graph_theory)

एक बड़ा देश चाहते हैं? ग्राफ गुणों को ट्वीक करें और उत्पन्न देश (जो कि सिर्फ एक ग्राफ है) को उन गुणों के लिए बाध्य करें जो इसे "लुक" देंगे जो आप चाहते हैं।

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


2

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

समस्या के लिए मेरा प्रारंभिक दृष्टिकोण आपके क्षेत्रों के 'विकसित' ('बढ़ने' के बजाय) होगा:

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

अब, जब तक आप चाहें, तब तक निम्नलिखित सूडोकोड चलाएं:

Pick a random hex A from the boundary list;
Pick a random neighbor B of this hex from a different country;
if (A's country has more hexes than B's country has) {
  change hex A to belong to B's country;
} else if (B's country has more hexes than A's country has) {
  change hex B to belong to A's country;
} else {
  flip a coin to decide which to change;
}
if ( the changed hex's old country has become disconnected ) {
  undo and reject this move;
} else {
  update the boundary list around the changed hex and its neighbors;
}

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

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

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

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