उत्तल जाल के एक समुच्चय में अवतल जाल का विघटन


10

मैं 2 कारणों से उत्तल जाल के एक सेट में अवतल मेष को विघटित करने में सक्षम होना चाहूंगा:

  1. पारदर्शी प्रतिपादन
  2. भौतिकी आकार

क्या एक एल्गोरिथ्म है जो इनपुट के रूप में त्रिकोण (अवतल) का एक सेट लेता है और त्रिकोण के कई सेटों (उत्तल) का उत्पादन करता है? मुझे यह पसंद है कि मूल जाल के कुछ हिस्सों के बीच छेद न भरें।

मैं पहले से ही एक छोटे से विचार के साथ आया हूं: सभी अवतल किनारों को ढूंढें, और किनारे छोरों के साथ जाल को विभाजित करें। क्या मैं सही रास्ते पर हूं? मैं इसे कैसे लागू कर सकता हूं?


"अवतल / उत्तल" जाल क्या है? यदि मेष का मतलब त्रिकोण नेटवर्क है, तो यह त्रिकोण का एक सेट है, जो उत्तल हैं। या आप 3D वस्तुओं की मात्रा के बारे में बात कर रहे हैं? शायद पॉलीहेड्रॉन?
इवान कुकिर

@ इवांका मेश, या पॉलीहेड्रा, अवतल / उत्तल भी हो सकता है, और परिभाषा बहुत अधिक है। उदाहरण के लिए, कोई भी सीधी रेखा पॉलीहेड्रॉन के इंटीरियर को एक से अधिक बार नहीं काटेगी।
कॉंगसबोंगस

जवाबों:


11

मैं कहूंगा कि आप सही रास्ते पर हैं, लेकिन एक इष्टतम और / या कुशल एल्गोरिथ्म के साथ आना एक और बात है: यह एक कठिन समस्या है। हालांकि, जब तक आपकी रुचि अकादमिक नहीं है, तब तक एक अच्छा-पर्याप्त समाधान पर्याप्त हो सकता है।

सबसे पहले, यदि आप अपने स्वयं के समाधान के साथ आने में रुचि नहीं रखते हैं, तो CGAL में पहले से ही उत्तल पॉलीहेडा अपघटन के लिए एक एल्गोरिथ्म है: http://doc.cgal.org/latest/Convex_decomposition_3/indit.html

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

पलटा हुआ चक्कर

जे। मार्क Keil द्वारा बहुभुज अपघटन में निम्नलिखित एल्गोरिथ्म शामिल हैं (अयोग्य रूप में):

diags = decomp(poly)
    min, tmp : EdgeList
    ndiags : Integer
    for each reflex vertex i
        for every other vertex j
            if i can see j
                left = the polygon given by vertices i to j
                right = the polygon given by vertices j to i
                tmp = decomp(left) + decomp(right)
                if(tmp.size < ndiags)
                    min = tmp
                    ndiags = tmp.size
                    min += the diagonal i to j
    return min

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

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

बायज़िट न्यू वर्टेक्स बायज़िट किसी अन्य रिफ्लेक्स वर्टेक्स से कनेक्ट होता है

कमियों में से एक यह है कि स्टीनर पॉइंट (एक मौजूदा किनारे पर मौजूद न होने वाले बिंदु ) बनाकर "बेहतर" डिकम्पोजिशन को अनदेखा करता है :

तिपतिया घास अपघटन दो steiner अंक का उपयोग कर

3 डी में समस्या समान हो सकती है; पलटा कोने के बजाय, आप "पायदान किनारों" की पहचान करते हैं। एक भोली कार्यान्वयन पायदान किनारों की पहचान करने के लिए होगा, और पॉलीहेड्रॉन पर प्लेन कट्स को तब तक बार-बार करें जब तक कि सभी पॉलीहेड्रे उत्तल न हों। की जाँच करें बर्नार्ड चाज़ेल द्वारा: "और एक निम्न सीमित बुरी से बुरी हालत इष्टतम एल्गोरिथ्म बहुकोणीय आकृति की उत्तल विभाजन" अधिक जानकारी के लिए।

पॉलीहेड्रॉन पायदान के साथ

ध्यान दें कि यह दृष्टिकोण सबसे खराब स्थिति पैदा कर सकता है, जो उप-पॉलीहेड्रा की एक घातीय संख्या है। ऐसा इसलिए है क्योंकि आप इस तरह के मामलों को कम कर सकते हैं:

कई नोकदार पॉलीहेड्रॉन

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


6

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

सटीक उत्तल अपघटन बनाम अनुमानित उत्तल अपघटन

निम्नलिखित अनुमानित उत्तल अपघटन पुस्तकालयों की जाँच करें: https://code.google.com/p/v-hacd/ http://sourceforge.net/projects/hacd/


0

यहां कुछ कोड दिए गए हैं जो आपकी मदद कर सकते हैं। यह जावा में है इसलिए आपको इसे सी ++ में बदलना होगा।

यहां एक और लेख भी है जो आपकी मदद कर सकता है


1
हाय नकाबपोश विद्रोही, लिंक-ही जवाब यहाँ हतोत्साहित किया जाता है। यदि URL कभी भी बदल जाता है या संसाधन अनुपलब्ध हो जाता है, तो यह उन उत्तरों को छोड़ सकता है जो लिंक पर पूरी तरह से निर्भर हैं, जो भविष्य के उपयोगकर्ताओं के लिए समाधानों से पूरी तरह खाली हैं। क्रेडिट और आगे पढ़ने के लिए लिंक प्रदान करना बहुत अच्छा है, जब तक कि आपका जवाब अभी भी अपने दम पर खड़ा हो सकता है और पाठक को गहरा क्लिक करने से पहले ही समस्या को हल करने के लिए एक गाइड प्रदान कर सकता है। कृपया इस उत्तर को संपादित करने पर विचार करें कि कम से कम एक व्यापक रूपरेखा को शामिल किया जाए कि आप किस तरह से काम कर रहे हैं।
DMGregory

@DMGregory कृपया उत्तर हटाएं जो मैं स्वयं नहीं कर सकता।

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

@DMGregory लेकिन फिर इस पोस्ट पर किसी अन्य उत्तर का डुप्लिकेट होगा। मैं सिर्फ दूसरे उत्तर को संपादित करूंगा और अपनी जानकारी वहां रखूंगा।

मुझे लगता है कि आपको लगा कि आपके पास पहली बार में इस उत्तर को साझा करने पर कुछ नया जोड़ना होगा। मुझे संदेह नहीं है कि आप अपने द्वारा लिंक किए गए कोड को ऐसे तरीके से समझा सकते हैं जो किसी मौजूदा उत्तर की कार्बन कॉपी नहीं है। यदि आप इसे हटाना चाहते हैं, तो ऐसा करने का लिंक आपको साइट के डेस्कटॉप संस्करण पर उपलब्ध है।
DMGregory
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.