सुरंग केंद्र लाइन ढूँढना?


19

मेरे पास 'पॉलीलाइन्स' से युक्त कुछ मैप फाइलें हैं (सुरंगों का प्रतिनिधित्व करने वाली प्रत्येक लाइन सिर्फ एक कोने की सूची है), और मैं कोशिश करना चाहता हूं और सुरंग 'सेंटर लाइन' को खोजूं (दिखाया गया है, मोटे तौर पर, नीचे लाल रंग में)।

वैकल्पिक शब्द

मुझे Delaunay triangulation का उपयोग करके अतीत में कुछ सफलता मिली है, लेकिन मैं उस विधि से बचना चाहूंगा क्योंकि यह (सामान्य रूप से) मेरे मानचित्र डेटा के आसान / लगातार संशोधन के लिए अनुमति नहीं देता है।

कैसे मैं यह करने में सक्षम हो सकता है पर कोई विचार?

मैं काफी कच्चे C ++ में काम कर रहा हूं।


gis.stackexchange.com/q/177/162 आप जो खोज रहे हैं उससे भी संबंधित है: कंकाल एल्गोरिदम
जुलिएन

3
मुझे लगता है कि एसओ के साथ क्रॉस लिंक प्रासंगिक है क्योंकि वहाँ भी उत्तर हैं
ढेर

@ जुलियन: आपने पहले ही अपने जवाब में इसे लिंक कर दिया था। मैं इसके माध्यम से पढ़ता हूं, लेकिन यह मेरे विशिष्ट प्रश्न का उत्तर नहीं देता है (जो, पुनर्विचार करने के लिए है: 'मैं पहले से ही जानता हूं कि MAT को कैसे खोजना है - लेकिन मैं सोच रहा हूं कि क्या कोई गैर-डेलॉयन एल्गोरिथ्म जानता है [अर्थात एक काम नहीं -) समस्या मेरी कोडिंग नहीं है;)] जो स्थानीय परिवर्तन के लिए कुशल है ')। SO पर एक उत्तर था जो या तो काफी उत्तर नहीं देता था लेकिन उसने बहुत प्रयास किया और मुझे यह सोचने के लिए बहुत कुछ दिया कि मैंने उस आदमी को चेक से सम्मानित किया है जब तक कि कुछ बेहतर नहीं होता है। नीचे दिए गए उत्तरों में से कोई भी अच्छा नहीं है (जो कि मेरी गलती हो सकती है)।
एसजे ३

जवाबों:


6

आपने Medial Axis Transform में एक अच्छा सन्निकटन निकाला है। Delaunay त्रिकोण वास्तव में इसके लिए एक अच्छा दृष्टिकोण प्रदान करता है। (मुख्य चुनौती यह है कि MAT के कुछ हिस्से सिर्फ खंडों के नहीं, बल्कि parabolas के टुकड़े हैं।)

मैंने अकादमिक साहित्य में काम करने वाले कोड (आमतौर पर C / C ++ मुझे याद है) के संदर्भ में चलाया है। Google विद्वान पर एक खोज करें और पुराने कागजात देखें (नए वाले 3 डी गणना पर ध्यान केंद्रित करते हैं)।


Delaunay का उपयोग करके मेरे पास कुछ कार्य कोड हैं। मैं वास्तव में पूछ रहा हूं कि क्या अन्य तरीके हैं।
sje397

1
@ sje397 सबसे पहले, Delaunay केवल समस्या को हल करता है, इसलिए अकेले इस कारण से बेहतर कोड पर शोध करने लायक हो सकता है। दूसरा, वास्तव में अन्य तरीके हैं। मैं दो संक्षिप्त रूप से रेखांकित कर सकता हूं: (1) आंतरिक बफ़र्स के माध्यम से एमएटी के लिए खोज और (2) पॉलीइन्स के यूक्लिडियन दूरी ग्रिड पर इलाके का विश्लेषण करते हैं। मैंने या तो उल्लेख नहीं किया क्योंकि दोनों अधिक अक्षम हैं और खराब परिणाम देते हैं। दूसरी बात यह है कि दूसरी विधि काफी तेजी से गतिशील समाधान के लिए उत्तरदायी है।
whuber

4

यह "बहुभुज कंकाल" में देखने लायक हो सकता है।

Http://www.cgal.org/Manual/3.2/doc_html/cgal_manual/Strect_skeleton_2/Chapter_main.html पर कुछ C ++ स्रोत का नमूना है


धन्यवाद अंडरकार्क मैं CGAL में आगे देखूंगा। लेकिन आवश्यकता यह है कि मेरे मानचित्र डेटा परिवर्तन के समय पुनर्गणना महंगी नहीं है।
sje397

सीजीएएल काफी तेज है - मक्खी की गणना पर संभव होना चाहिए। अन्यथा, आप तथाकथित 'गतिज डेटा संरचनाओं' पर एक नज़र डाल सकते हैं: cgal.org/Manual/3.3/doc_html/cgal_manual/…
julien

"कंकाल" MAT के लिए एक और शब्द है। "औसत दर्जे का अक्ष परिवर्तन" की खोज ने मेरे अनुभव में "कंकाल" की खोज की तुलना में अधिक और बेहतर हिट प्राप्त किए हैं।
whuber

"कंकाल" अधिक सामान्य लगता है - MAT केवल एक विशिष्ट एल्गोरिथ्म है कंकाल के लिए, है ना? जो भी हो, यह विषय नहीं है ...!
जूलियन

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