बहुभुज के लिए लाइनें


11

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

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

किसी भी अस्पष्ट विवरण के लिए क्षमा करें, लेकिन जैसा कि मैंने कहा था, मैं एक ऐसे मार्ग के संभावित समाधानों का मार्गदर्शन नहीं करना चाहता, जो मैं पहले से ही देख चुका हूं, क्योंकि मैं "पहले विचार" में एक अंतिम समाधान के रूप में ज्यादा दिलचस्पी रखता हूं।


क्या रेखाएं संयोग कर सकती हैं? रेखाएँ पार कर सकती हैं? (यानी यह साफ है?) यदि हां, तो मुझे उम्मीद है कि इस प्रक्रिया का निर्माण बिल्ड भी विशिष्ट नहीं होगा।
किर्क कुएकेन्डल

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

विमान पर या गोले पर बिंदु हैं?
किर्क कुएकेन्डल

कर्क ... एक विमान पर, मीट्रिक x, y निर्देशांक, गोलाकार निर्देशांक नहीं। उदाहरण के लिए, मान लें कि आपके पास लाइन सेगमेंट हैं जो एक वोरोनोई आरेख बनाते हैं, लेकिन आपके पास सभी सेगमेंट हैं जो इसे बनाते हैं लेकिन वास्तविक डेटा संरचना नहीं है जो इसके लिए नेतृत्व करता है। संक्षेप में, प्रत्येक खंड जुड़ा हुआ है और प्रत्येक खंड अद्वितीय है।

जवाबों:


4

शायद "क्षेत्र भरें"? यहाँ और यहाँ देखें ।

संपादित करें

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

उदाहरण

मूल ग्राफ:

मूल ग्राफ

त्रिभुजित ग्राफ़:

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


बिल अप करने के लिए जा रहे हैं क्योंकि मैं उस पार नहीं आया था ... विभिन्न विषयों में लोगों से अन्य टिप्पणियों को सीमित नहीं करना चाहता था।

हालांकि, मोटे तौर पर रेखापुंज भरता है, यह निकटतम जवाब है। मेरे पास अभी भी एक एल्गोरिथम नाम नहीं है जब तक कि यह रैस्टर या वेक्टर से जुड़ा नहीं है लेकिन "स्वीप" एल्गोरिथ्म पर्याप्त हो सकता है, लेकिन मैं अपने जीवन के लिए यह पता नहीं लगा सकता कि निर्देशांक X के बजाय Y द्वारा क्यों सॉर्ट किया जाएगा जो ज्यादातर भाषाओं में लागू करना आसान है)।

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

5

में ग्राफ सिद्धांत , इस आपरेशन कहा जाता है गणना का सामना करना पड़ता । यह किसी दिए गए ग्राफ के दोहरे की संगणना से संबंधित है ।

उदाहरण के लिए, GeOxygène java पुस्तकालय में, एक ग्राफ (जिसे CarteTopo कहा जाता है ) में अपना चेहरा पुनः प्राप्त करने के लिए एक विधि getFaces है ।

इसे JTS में बहुभुज कहा जाता है


अच्छा लिंक। हालांकि, वे सभी मानते हैं @ दान की समस्या पहले ही हल हो गई है: एक ग्राफ "प्लानर" को कॉल करने में सक्षम होने का मतलब है कि आप पहले से ही बहुभुज चेहरे की पहचान कर चुके हैं। वह जानना चाहता है कि पहले स्थान पर आर्क्स (विमान में) के एक मनमाने संग्रह को एक ईमानदारी से अच्छाई प्लानर ग्राफ में बदलने के बारे में कैसे जाना जाता है। इसके लिए इसकी "टोपोलॉजी" का प्रतिनिधित्व करने की आवश्यकता है, जैसे कि DCEL।
whuber

बहुत बहुत धन्यवाद, आप ज्ञान का एक फव्वारा हैं! मुझे आश्चर्य है कि कोई इतना शानदार कैसे हो सकता है।
जुलिएन

4

रेपराप मेजबान सॉफ्टवेयर लाइन सेगमेंट की सूची (कुछ अज्ञात यादृच्छिक क्रम में) को पॉलीगॉन की सूची में परिवर्तित करता है, जो कि आप क्या करने की कोशिश कर रहे हैं, के समान है।

विशेष रूप से, रिपरैप "एंड मैचिंग" एल्गोरिथम पैथोलॉजिकल मामलों का एक गुच्छा संभालता है।

अफसोस, RepRap सॉफ्टवेयर मानता है कि हर कोने एक है भी यह करने के लिए जा किनारों की संख्या - एक सामान्य वस्तु पर एक कोने में जा रहा 2 लाइनों; जब एक वस्तु का कोना दूसरी वस्तु के कोने को छूता है, तो 4 लाइनें एक साथ चलती हैं। मुझे नहीं पता कि वोरोनोई आरेख को संभालने के लिए इस एल्गोरिदम को अनुकूलित करना कितना कठिन होगा, जिसमें आमतौर पर हर कोने में 3 किनारे होते हैं।


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

3

क्या आपने अपनी समस्या के समाधान के लिए GRASS का कोड आधार खोजा है? -> http://old.nabble.com/Polyline-to-Polygon-operation-td20257839.html


1
धन्यवाद ... लेकिन मैं एक विशिष्ट "पैकेज्ड" समाधान की तलाश नहीं कर रहा हूं, लेकिन अंतर्निहित एल्गोरिथ्म और / या इसका नाम जो जीआईएस के विभिन्न क्षेत्रों, कॉम्प जीओएम और / या कॉम्प साइंस में आएंगे ... आने वाले विचारों को रखें

मैं विशेष रूप से मेरे लिंक में 2 उल्लिखित प्रक्रियाओं के पीछे स्रोत कोड को देखने के बारे में सोच रहा था जो आपकी मदद कर सकता है।
ओयोन १४'११

मुझे लगता है कि मुझे कोड देखने के लिए सॉफ़्टवेयर स्थापित करना होगा क्योंकि मुझे उन पृष्ठों पर कोई सूची दिखाई नहीं देती है जब तक कि मुझे कुछ याद न हो।

1
: आप ऑनलाइन घास स्रोत ब्राउज़ कर सकते हैं trac.osgeo.org/grass/browser
UnderDark

@underdark सूचक के लिए धन्यवाद। जहाँ तक मेरा से बता सकते हैं main.cमें v.typeस्रोत, सभी ऐसा होता है यह है कि सुविधाओं को फिर से लेबल सीमाओं के रूप में कर रहे हैं: कोई वास्तविक प्रसंस्करण होता है। पूर्वव्यापी में यह बहुत आश्चर्य की बात नहीं है: यदि (मुझे निश्चित रूप से पता नहीं है) सुविधाओं को पूरी 2 डी टोपोलॉजिकल जानकारी के साथ बनाए रखा गया है, तो बहुभुज क्षेत्रों की पहचान करने के लिए सभी गणना स्वचालित रूप से सुविधा निर्माण या आयात के दौरान हुई है और इसे बनाए रखा गया है सभी जियोप्रोसेसिंग ऑपरेशन।
whuber

3

अभिनंदन

मुझे नहीं लगता कि आप जो देख रहे हैं वह एक विशिष्ट एल्गोरिथम है। आपके डेटासेट के आधार पर कार्य काफी कठिन या सरल हो सकता है।

आपको समस्या को कम से कम 2 भागों में विभाजित करना चाहिए। 1) एक नेटवर्किंग समस्या का अधिक है, कैसे linestrings के बंद छल्ले खोजने के लिए। 2) एक बहुभुज के रूप में बंद अलसी को व्यक्त करें

दूसरा भाग, जो "पॉलीगॉन में लाइनों को परिवर्तित करना" है, बहुभुज / लिनेस्ट्रिंग प्रतिनिधित्व की तुलना में प्रारूप के अधिक निर्भर करता है। मेरा मतलब है:

LINESTRING (1 1, 2 2)
LINESTRING (2 2, 2 1)
LINESTRING (2 1, 1)

को:
POLYGON ((1 1,2 2,2 1,1 1))

बहुभुज के लिए लाइन परिवर्तित कर रहा है, लेकिन क्या आप मेरे बारे में बात नहीं कर रहे हैं। अधिक कठिन हिस्सा पहले पर है। यदि आपके पास लाइनों की एक स्पेगेटी है, तो उन्हें बंद अलसी के रूप में कैसे ऑर्डर किया जाए।

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

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

PostGIS में फंक्शन को ST_Polygonize कहा जाता है। यह फंक्शन आपके द्वारा दिए जाने वाले linestrings से सभी संभव बहुभुज बनाता है।

यह GEOS द्वारा किया जाता है ताकि आप GEOS और JTS कोड दोनों में एल्गोरिदम पा सकें।

बस कुछ विचार

/ Nicklas


1

आप "फॉरवर्ड स्टार" एल्गोरिथ्म की खोज करने की कोशिश कर सकते हैं। मुझे बताया गया है कि यह सामान्य है, लेकिन इसके बारे में एकमात्र चर्चा जो मैंने कभी पढ़ी है, वह हमेशा आर्कगिस के संदर्भ में थी। शायद आगे के स्टार के लिए इन व्याख्यान नोटों में उद्धृत संदर्भों पर गौर करें ।


1
मैं यहां टिप्पणी करूंगा, भले ही यह टिप्पणी प्रस्तावित समाधानों के कुछ अन्य लोगों को भी संबोधित करती है: समस्या को एक नेटवर्क (या ग्राफ) में प्रस्तुत नहीं किया जा सकता है। इसके बारे में जानकारी की आवश्यकता है कि लाइनें दो आयामी सतह के भीतर कैसे जुड़ी हुई हैं । इस प्रकार फॉरवर्ड / बैकवर्ड स्टार अभ्यावेदन से बहुत कम उपयोग होगा; एक DCEL या ऐसा कुछ की जरूरत है।
whuber

@whuber - मैं मान रहा था कि डैन की टिप्पणी कि सभी "दोषों" को हटा दिया गया था कि लाइनों को साफ किया गया था। जैसे, यह एक ग्राफ में सभी चक्रों को खोजने की एक ग्राफ ट्रैवर्सल समस्या के लिए इसे कम करना संभव होना चाहिए। पहले मैंने सोचा था कि फॉरवर्ड स्टार एल्गोरिदम में मदद करेगा जो प्रत्येक नोड पर सबसे तेज दाएं मुड़ने वाले ग्राफ के आसपास चल सकता है। हालांकि, थोड़ा और देखने पर लगता है कि बेहतर तरीके हैं। stackoverflow.com/questions/261573/… लेकिन फिर भी, यह मानता है कि इस समस्या को ग्राफ़ के रूप में फिर से कहा जा सकता है।
किर्क क्यूकेन्डल

1
एक ग्राफ में चक्रों को ढूंढना वैसा ही नहीं है जैसा कि किसी प्लैनर ग्राफ में चेहरे खोजने पर होता है। वर्टिकल ग्राफ को कोने के साथ {a, b, c, d} और किनारों {a, b}, {a, c}, {b, c}, {b, d}, {c, d} पर विचार करें। चक्रों का एक आधार होता है-> b-> d-> c-> a और a-> b-> c-> a। प्लानर में एम्बेडिंग a -> (0,1), b -> (2,2), c -> (2,0), d -> (3,1) (जहां सभी किनारे लाइन सेगमेंट हैं), चक्र a-> b-> d-> c-> a एक चेहरा नहीं है, लेकिन अगर हम d (1,1) में जाते हैं, तो यह एक चेहरा है। इससे पता चलता है कि क्यों "चेहरे" की अवधारणा को ग्राफ़ को विमान में एम्बेड करने की आवश्यकता होती है और ग्राफ़ के अमूर्त संरचना से चेहरे की गणना शुद्ध रूप से क्यों नहीं की जा सकती।
whuber
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.