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