यादृच्छिक 2 डी लाइनों के बीच अंतरिक्ष भरना


23

एक क्षेत्र (2D) को अनियमित रूप से रेखाओं से भरा हुआ मानें (चित्रा के बाद)। हम एक तरह से चार सीमा किनारों सहित लाइनों के बीच खाली स्थानों को भरने में रुचि रखते हैं:

0- पार्सल के आकार को अधिकतम करना;
1- भरने वाले पार्सल का आकार क्षैतिज या लंबवत रूप से संरेखित है;
2- भरने वाले पार्सल का आकार चौकोर है, यानी, आराम से संरेखण ;
3- पार्सल भरने की आकृति किसी भी चतुष्कोण की होती है। हमारा मूल प्रश्न

तो अब के लिए तीन अलग-अलग परिदृश्य हैं।
ध्यान दें कि लाइनें फॉर्म [x1,y1,x2,y2]पॉइंट सेट, वास्तविक संख्याओं की हैं।

[* * *] संभव समाधान / एल्गोरिदम / कोड स्निपेट / आदि के विचार स्वागत से अधिक हैं।

यहाँ छवि विवरण दर्ज करें


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

यह अच्छी तरह से काम करता है लेकिन यह केवल पहले परिदृश्य को कवर करता है और यह धीमा भी है।


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


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

समस्या के लिए एक गणितीय दृष्टिकोण निम्नानुसार कहा जा सकता है:
2 डी: सभी आयताकार खोजें जो किसी दिए गए 2 डी क्षेत्र से निकाले जा सकते हैं कुछ पंक्तियों के साथ बड़े आयत आकार के लिए संभव के रूप में अनुकूलित।
3 डी: सभी आयताकार क्यूब्स खोजें जो दिए गए 3 डी क्षेत्र से कुछ उप-विमानों (बेहतर: बहुभुज) के साथ संभव के रूप में बड़े ब्लॉक आकार के लिए अनुकूलित किए जा सकते हैं।


चूंकि यह एक ऑन-गोइंग रिसर्च का हिस्सा है, इसलिए नीचे दी गई टिप्पणियों में पूछे गए कुछ प्रश्नों के कुछ निश्चित उत्तर नहीं हैं जो हम प्रदान कर सकते हैं। हम मानते हैं कि अब तक दी गई जानकारी वास्तव में समस्या की समग्र तस्वीर प्राप्त करने के लिए पर्याप्त है। फिर भी, हम सामुदायिक लाभ के लिए कुछ विवरण प्रदान करते हैं।
आप अंतिम प्रश्न के समाधान के लिए कुछ प्रतिबंध लगा सकते हैं, हालांकि, हमारा मानना ​​है कि बाद में अधिक जोड़ना हमेशा संभव है। उदाहरण के लिए, इनका पालन करें: {2D मामला}
ऊपर वर्णित शर्तों के तहत निकाले जाने वाले ब्लॉक (आर्थिक रूप से इष्टतम आयत) का सबसे अच्छा आकार उदाहरण में इस क्षेत्र के लिए 1x1 mदिया 10x10 mगया है। यह आर्थिक मूल्य के आधार पर परिभाषित एक बाधा है। काटने आदि के लिए न्यूनतम व्यावहारिक आकार0.15x0.15 m; इसलिए यह दूसरे आकार की सीमा है।
यहाँ छवि विवरण दर्ज करें
ऊपर दिया गया आंकड़ा ब्लॉक आकार के आधार पर आर्थिक मूल्य फ़ंक्शन को दर्शाता है। तो इस विशेष मामले के लिए हर चट्टान का टुकड़ा 0.15x0.15 mकेवल बेकार है। 1.7x1.7 mऑपरेशन की सीमा से बड़ा कोई ब्लॉक आकार नहीं होगा ।


3
@ आरके - मैं असहमत हूं। वह पहले ही बता चुका है कि वे क्या देख रहे हैं। यकीन है कि कई संभावित समाधान हैं, लेकिन उन सभी को उपयोगी और मतदान करने से रोकने के लिए कुछ भी नहीं है।
जीआईएस-जोनाथन

1
जैसा कि यह एक एल्गोरिथम प्रश्न है जो काफी गणित भारी हो सकता है, आप कोशिश कर सकते हैं - math.stackexchange.com
GIS-Jonathan

1
बारीकी से संबंधित: gis.stackexchange.com/questions/27303 । @RK नोटों के रूप में वर्तमान प्रश्न का कोई निश्चित जवाब नहीं है क्योंकि यह पर्याप्त रूप से अच्छी तरह से प्रस्तुत नहीं किया गया है। कितने आयतों की अनुमति है? "अधिकतम आकार" का क्या अर्थ है? ध्यान दें, यह भी, कि यह "यादृच्छिक टाइलिंग" समस्या नहीं है: लाइनें केवल उनके पूरक के माध्यम से निर्धारित होती हैं, जिन क्षेत्रों पर कब्जा किया जा सकता है; समाधान निश्चित रूप से यादृच्छिक नहीं होंगे। ध्यान दें, भी, कि एक आसान सरलीकरण तुरंत उपलब्ध है: समस्या को पूरक के प्रत्येक घटक के भीतर अलग से हल किया जा सकता है।
whuber

1
@ वाउचर: ठीक है, एक आवेदन जिसमें हम रुचि रखते हैं, वह है कि एक भारी खंडित 'खदान' में निकालने योग्य अक्षुण्ण 'रॉक' ब्लॉक के वितरण का पता लगाना। खैर, जीआईएस इस समस्या के लिए आशाजनक लगता है, हम सोचते हैं। हमने इसे प्रश्न में भी जोड़ा। हमारा अनुमान है, जीआईएस समुदाय अपनी संबंधित अन्य विशेष समस्याओं के लिए विचार से लाभान्वित हो सकता है। वैसे भी, यह आपके ऊपर है यदि आप इसे स्थानांतरित करते हैं;)
डेवलपर

4
जैसा कि @whuber सुझाव देते हैं, यह वास्तव में एक GIS प्रश्न नहीं है (हालांकि मैं इससे नाराज नहीं हूं कि यह यहां पूछा गया है।) आपको कम्प्यूटेशनल ज्यामिति या अनुकूलन के लिए एक फोरम में जवाब देने में बहुत बेहतर भाग्य मिलेगा।
लवलेव

जवाबों:


2

मेरे पास एक विचार है कि कैसे आप FME (सेफ सॉफ्टवेयर द्वारा) का उपयोग करके बड़े ब्लॉकों से छोटे ब्लॉकों तक चलने का काम करते हैं। रिकॉर्ड के लिए मैं उनके लिए काम नहीं करता, लेकिन उनके टूल की पर्याप्त प्रशंसा करता हूं ...

  1. ब्याज के क्षेत्र पर "बाउंडिंगबॉक्सआरप्लेजर" का उपयोग करें।
  2. इसे एक स्थानीय समन्वय प्रणाली में दोहराएं (बाद में जब आपको पैरों / मीटर में "टाइल" की आवश्यकता हो।)
  3. "बफ़र" ट्रांसफार्मर के साथ लाइनों को बफर करें। आपको केवल एक मनमाने आकार की आवश्यकता है, कहते हैं .01 फीट / मीटर। हम यहां जो देख रहे हैं वह अगले चरण के लिए लाइन का बहुभुज है।
  4. एक "टायलर" ट्रांसफार्मर जोड़ें। पैर या मीटर में एक बड़े (अनुमानित या अन्यथा) टाइल आकार निर्दिष्ट करें। हम यहां जो कर रहे हैं वह वर्ग खंडों में ब्याज के क्षेत्र को बढ़ा रहा है। डेटासेट के आधार पर वास्तव में बड़े आउटलेर्स प्राप्त करने के लिए बड़े शुरू होते हैं।
  5. एक "क्लिपर" ट्रांसफार्मर जोड़ें। हम यहां क्या कर रहे हैं, यह देखने के लिए कि टाइलें अच्छी / बुरी हैं, यह देखने के लिए आवश्यक रूप से स्लाइस अप कर रहा है। आउटपुट पर, "अंदर" वाली टाइलें बहुत बड़ी हैं। हालांकि, "बाहर" वाली टाइलें काफी बड़ी हैं और काटने के लिए तैयार हैं ...
  6. यहां पर यह जटिल है, लेकिन कठिन नहीं है ... हम ट्रांसफार्मर को लूप करने जा रहे हैं ताकि हम मूल बाउंडिंगबॉक्स का फिर से उपयोग करें, लेकिन उन क्षेत्रों को क्लिप करें जो पहले से ही काटने के लिए तैयार हैं। तो, एक क्लिपर जोड़ें और क्लिपर को पहले के क्लिपर आउटपुट पर "आउटपुट" टाइल्स के रूप में रूट करें। अब हमारे पास एक एकल बहुभुज है जो फिर से काम करने के लिए तैयार है।
  7. एक बार फिर टाइलर का उपयोग करें, इस बार एक छोटी टाइल निर्दिष्ट करें। उदाहरण के लिए यदि आपने पहले 100 मीटर टाइल्स का उपयोग किया था, तो 90 मीटर की कोशिश करें।
  8. एक और क्लिपर जोड़ें, इनपुट क्लिपर में बफर लाइनें हैं, और इनपुट क्लिपी इनपुट के रूप में छोटी टाइल है।

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

आपके (अच्छी तरह से विस्तृत) विवरण के आधार पर, यह केवल आपके विकल्प 1 के लिए अब काम करेगा। बिना ज्यादा समय दिए सिर्फ अभी तक।

वैसे भी, यह सिर्फ एक दृष्टिकोण है जो मैं कम से कम गेहूं को झाड़ू से छानने के लिए शुरू करूंगा।

FME टाइल उदाहरण

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