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