2011-09-21 16 views
9

मेरे पास बहुत सारे बहुभुज हैं। आदर्श रूप में, सभी बहुभुज एक-दूसरे को ओवरलैप नहीं करना चाहिए, लेकिन वे एक दूसरे के समीप स्थित हो सकते हैं।बहुभुज को जाल में कनवर्ट करें

लेकिन व्यावहारिक रूप से, मैं इन सब बहुभुज उपयोगकर्ता हाथ ड्राइंग इनपुट है, जो के रूप में मशीन-precised के रूप में मैं उन्हें होना चाहता हूँ नहीं है से प्राप्त कर रहे हैं मामूली बहुभुज ओवरलैप (एक निश्चित सहिष्णुता द्वारा परिभाषित) के लिए अनुमति देने के लिए होता है ।

  1. बहुभुज
  2. चेक की एक श्रृंखला इनपुट करने के लिए एक की अनुमति देता है, अगर बहुभुज एक prespecified सहिष्णुता
  3. यदि हाँ से ज्यादा ओवरलैप हो रहे हैं:

    मेरा प्रश्न है, वहाँ किसी भी सॉफ्टवेयर पुस्तकालय घटक है कि है फिर रोकें, या फिर,

  4. सामान्य वर्टेक्स और किनारों को एक साथ जोड़कर बहुभुज के लिए समन्वय और तत्वों के संदर्भ में जाल बनाएं?
  5. अधिक महत्वपूर्ण बात यह है कि जाली किनारों को मूल बहुभुज के किनारे पर वापस लिंक करें?

या क्या कोई इस मुद्दे से पहले निपटता है?

+0

क्या बहुभुज दो या तीन आयामों में हैं? –

उत्तर

3

यह समस्या जीआईएस अनुप्रयोगों की दैनिक "रोटी" है - यह वही है जो वास्तव में किया जाता है। हमने यह भी सीखा कि जीआईएस पाठ्यक्रम में। जीआईएस सिस्टम में देखें कि वे इस मुद्दे को कैसे संबोधित करते हैं। जैसे ArcGIS को टोपोलॉजी नियम परिभाषित करने के लिए परिभाषित किया गया है और इसमें कुछ फ़ंक्शन हैं, यह देखने के लिए कि क्या संपादित की गई विशेषताएं स्थलीय रूप से सही हैं। http://webhelp.esri.com/arcgisdesktop/9.2/index.cfm?TopicName=Topology_rules

1

हां, आप OGR का उपयोग कर सकते हैं। इसमें पाइथन बाइंडिंग है। विशेष रूप से, ज्यामिति वर्ग में एक अंतरण विधि है। मैं पूरी तरह से समझ नहीं पा रहा हूं कि आप अंक 4 और 5 में क्या चाहते हैं।

+0

मुझे सच में नहीं लगता कि ओजीआर प्रासंगिक है, मैं सामान्य एल्गोरिदम की तलाश में हूं, कुछ ऐप्स जीआईएस विशिष्ट प्रारूप के साथ फ़ाइलों को पढ़ने/लिखने के लिए नहीं। – Graviton

+0

ईह, मैं देखता हूं कि आप एक पुस्तकालय की तलाश में हैं, जो ओजीआर है। यह पूर्ण वेक्टर मैनिपुलेशन कर सकता है, और यह है कि कई जीआईएस सॉफ्टवेयर पैकेज किस पर आधारित हैं। तो हाँ, पूरी तरह से प्रासंगिक (जब तक कि आप इसे मैन्युअल रूप से नहीं करना चाहते)। – Benjamin

+0

चौराहे विधि/फ़ंक्शन ओवरलैपिंग आवश्यकता को संबोधित करेगा, लेकिन केवल 2 डी में और केवल अगर GEOS स्थापित है। आमतौर पर, इसका मतलब स्रोत से निर्माण करना है। शायद संभवतः एक बेहतर विकल्प http://gispython.org/shapely/docs/1.0/manual.html है –

2

यह बहुत लंबा है, केवल इसलिए कि सवाल इतना बड़ा है। मैंने अपनी बुलेट पॉइंट्स के आधार पर अपनी टिप्पणियां समूहित करने का प्रयास किया है।

अवयव बहुभुज आकर्षित करने के लिए

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

शायद एक विकल्प यह है कि आप प्रक्रिया के इस तत्व को बाकी हिस्सों से अलग करना चाहते हैं जो आप करने की कोशिश कर रहे हैं। कुछ बिल्कुल शानदार पूर्व-मौजूदा संपादक हैं जिनका उपयोग आप 2 डी और 3 डी बहुभुज बनाने के लिए कर सकते हैं।

Inkscape आसान 2d बहुभुज दर्ज करने के लिए करता है कि एक वेक्टर ग्राफिक्स संपादक का एक उदाहरण है, और उत्पादन एसवीजी, जो पार्स करने के लिए यथोचित आसान है उत्पादन का लाभ दिया है।

तीन आयामों में Blender एक ओपन सोर्स एडिटर है जिसका उपयोग मनमाने ढंग से ज्यामिति बनाने के लिए किया जा सकता है जिसे कई प्रारूपों में निर्यात किया जा सकता है।

आप एक गूगल-नक्शे एपीआई का उपयोग कर सकते हैं (संभवतः एक देशी एचटीएमएल प्रतिपादन नियंत्रण में), और आप एक नक्शा ओवरले पर स्थानिक अंक जोड़ने में रुचि रखते हैं, तो आप संबंधित click-to-draw polygon question on stackoverflow में रुचि हो सकती।पिछले अनुभव से, OpenLayers जैसे अन्य मानचित्र API समान दृष्टिकोण का समर्थन करते हैं।

चेक बहुभुज

थॉमस टी ओवरलैप हो रहे हैं कि क्या उसकी answer में मुद्दा बनाया, यहां संबंधित विधेय है कि इस और संबंधित प्रश्नों को संबोधित करने के लिए किया जा सकता के परिवारों रहे हैं। यदि आप सचमुच केवल दो आयामों में ओवरलैप और अन्य सेट सैद्धांतिक परिचालन (संघ, चौराहे, सेट अंतर) की तलाश में हैं, तो आप General Polygon Clipper

का उपयोग कर सकते हैं, आपको दो और बहुभुज समस्या पर विचार करने की आवश्यकता हो सकती है जब दो बहुभुज ' जब वे चाहिए तो एक चरम पर ओवरलैप या साझा करें। आप ऐसी समस्याओं से बचने के लिए दो और तीन आयामी बहुभुज को फैलाने (विस्तारित) करने के लिए एक मिंकोवस्की योग का उपयोग कर सकते हैं। Computational Geometry Algorithms Library में इन एल्गोरिदम के मजबूत कार्यान्वयन हैं।

मुझे लगता है कि यह अधिक संभावना है कि आप वास्तव में सॉफ्टवेयर का एक टुकड़ा है कि शिखर वेल्डिंग प्रदर्शन कर सकते हैं के लिए देख रहे हैं, क्रिस्टर Ericson की किताब Real-time Collision Detection बढ़त के संबंधित मुद्दों पर इस क्षेत्र में बुनियादी बातों का व्यापक और बहुत पठनीय विवरण शामिल हैं, और भी स्नैपिंग, क्रैक डिटेक्शन, टी-जंक्शन और अधिक। हालांकि, भले ही कोड स्निपेट उस पुस्तक के लिए शामिल किए गए हों, मुझे कोई तैयार पुस्तकालय नहीं पता है जो इन समस्याओं को हल करता है, विशेष रूप से, मूल वर्टेक्स वेल्डिंग से परे किसी भी चीज़ के लिए कोई पूर्ण कार्यान्वयन नहीं किया जाता है।

स्पष्ट रूप से सभी 3 डी पैकेज (ब्लेंडर, माया, अधिकतम, गैंडो) सभी इस समस्या को हल करने के लिए सॉफ़्टवेयर और टूल में निर्मित शामिल हैं।

समूह कोने

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

अद्यतन बहुभुज को मूल पर वापस लिंक करें।

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

अन्य टिप्पणियाँ

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

संबंधित मुद्दे