2009-03-04 15 views
8

बहुभुज में वर्टिसेस की संख्या को कम करने के लिए एक अच्छा एल्गोरिदम क्या है, जिस तरह से यह बहुत अधिक दिखता है?पॉलीगॉन वर्टिसेस को कम करें

इनपुट: पॉलीगॉन, बिंदुओं की एक सूची के रूप में दर्शाया गया है, जिस तरह से बहुत अधिक वर्टिसीज हैं: उदाहरण के लिए माउस से कच्चा इनपुट।

आउटपुट: बहुत कम ऊर्ध्वाधर वाले बहुभुज जो अभी भी मूल की तरह दिखते हैं: टकराव का पता लगाने के लिए उपयोग करने योग्य कुछ, उदाहरण के लिए (आवश्यक रूप से उत्तल नहीं)।

संपादित करें: इसका समाधान ग्राफ़ पर सर्वोत्तम फिट के बहु-खंडित रेखा को ढूंढने के समान होगा। इसे मेरे एल्गोरिदम पुस्तक में सेगमेंटेड लीस्ट स्क्वायर कहा जाता है।

संपादित 2: डगलस पेकर एल्गोरिदम मैं वास्तव में चाहता हूं।

+0

वाह! यह एल्गोरिदम बस रॉक! : डी –

उत्तर

3

संपादित जैसी चीजों के लिए गूगल: ओह देखो, Simplifying Polygons

आप टक्कर पता लगाने का उल्लेख किया। आप वास्तव में सरल हो सकते हैं और इसके चारों ओर एक बाध्यकारी उत्तल झुकाव की गणना कर सकते हैं।

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

दरअसल, आप शायद अपने बहुभुज में सभी बिंदुओं का उपयोग "बिंदुओं के बादल" के रूप में कर सकते हैं और इसके आसपास अवतल हल की गणना कर सकते हैं। मैं एक एल्गोरिदम लिंक की तलाश करूंगा। इस पर सबसे बुरा मामला पूरी तरह से उत्तल बहुभुज होगा।

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

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

यह post में उत्तल भाग के बारे में कुछ विवरण हैं।

+0

मैं टक्कर का पता लगाने के लिए आवश्यक होने पर बाद में उत्तल घटकों में अपने बहुभुज को deconstruct करने के लिए cgal.org पर एल्गोरिदम का उपयोग कर सकता हूं। लाल हेरिंग के लिए खेद है। –

1

वहां बहुत सारी सामग्री है। बस "जाल कमी", "जाल सरलीकरण", "जाल अनुकूलन", आदि

+0

इनमें से अधिकतर जाल एल्गोरिदम कई त्रिकोणों की अपेक्षा करते हैं। मैं सिर्फ एक बहुभुज में शिखर को कम करने की कोशिश कर रहा हूं। –

+0

यदि आपका बहुभुज त्रिकोण के जाल से पहले से ही प्रतिनिधित्व नहीं किया गया है, तो क्या आप इसे जाल में परिवर्तित नहीं कर सकते हैं और किसी भी उल्लिखित एल्गोरिदम का उपयोग नहीं कर सकते? – Joe

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