2010-08-20 12 views
9

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

ओपन = संगत, देख http://en.wikipedia.org/wiki/Triangle_strip

उदाहरण: http://en.wikipedia.org/wiki/File:Triangle_Strip_Small.png मैं उत्पादन ABDFEC या ACEFDB

जरूरत इस पट्टी के लिए
+1

क्या आप "त्रिकोणीय पट्टी" द्वारा मतलब है? क्या यह त्रिभुज का एक मनमाना आकार है? या कुछ और विशिष्ट? –

+0

क्या आप एक छवि शामिल कर सकते हैं? –

+0

यह "त्रिभुज पट्टी" के लिए है, "त्रिकोणीय पट्टी" नहीं। एक ट्रिस्ट्रिप एक डेटा प्रारूप होता है जो केवल त्रिकोणों की सूची निर्दिष्ट करता है जो केवल nTriangles + 2 कोष्ठक का उपयोग करते हैं, क्योंकि प्रत्येक त्रिभुज पहले त्रिकोण के अंतिम दो शीर्षकों का उपयोग करता है। –

उत्तर

0

अगर अपने आकार एक विशेष रूप से सरल संरचना है एक शॉर्टकट हो सकता है, लेकिन सामान्य रूप में मुझे लगता है कि आप निम्नलिखित

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

मेरा मानना ​​है कि निम्नलिखित काम करना चाहिए:

कोने की सूची पूरी करें। अपने बहुभुज में पहला बिंदु जोड़ें। ढेर पर दूसरी बिंदु पुश करें। बहुभुज में तीसरा बिंदु जोड़ें। स्टैक पर पॉइंटिंग पॉइंट्स के बीच वैकल्पिक रूप से जारी रखें और उन्हें पॉलीगॉन में जोड़कर जब तक आप सूची के अंत तक नहीं पहुंच जाते। जब आप सूची के अंत तक पहुंच जाते हैं, तो स्टैक के बिंदु पॉप करें और उन्हें बहुभुज में जोड़ें।

+0

मुझे लगता है कि यह आंतरिक बिंदुओं के लिए जिम्मेदार नहीं है। क्या यह? –

+0

@ अविश्वासी: यह बहुभुज को "सरल" करने का प्रयास नहीं करता है, यदि आपका यही मतलब है - यानी, यह एक बहुभुज बनाने जा रहा है जो त्रिकोण पट्टी की रूपरेखा से मेल खाता है। यदि (उदाहरण के लिए) आपने एक सतह को एक लंबी त्रिभुज स्ट्रिप में टेसेलेट किया है जो बहुत से हवाओं में घूमता है, तो यह एक बहुभुज का उत्पादन करने जा रहा है जो ठीक उसी तरह हवाओं के आसपास होता है। कम से कम यदि आप 3 आयामों का उपयोग कर रहे हैं, तो आप अधिक कुछ नहीं कर सकते हैं - आंतरिक बिंदुओं में अक्सर ज़ेड वैल्यू अलग-अलग होते हैं जिन्हें संरक्षित करने की आवश्यकता होती है। –

+0

हां। मैंने सोचा कि ओपी का इरादा था। शायद मैं गलत हूँ। Tnx। –

1

alt text

मैं अपने त्रिकोण पट्टी हमेशा एक ही तरीके (जो मेरा मानना ​​है कि ओपन के लिए सच है) से जुड़ा हुआ है मान लेंगे।

  • "नीचे" कोने हमेशा दो अलग हैं: एक, सी, ई, ...
  • "टॉप" कोने हमेशा से रहे हैं दो अलग: बी, डी, एफ, ...

"नीचे" सूची लें और "शीर्ष" सूची के विपरीत को संलग्न करें। (उदाहरण के लिए ACEFDB)


या, अधिक सीधे, पत्र के बजाय एक शून्य आधारित सूचकांक का उपयोग कर:

// do "bottom" 
for (i = 0; i < N; i += 2) 
    addVertex(i) 

// do "top" 
largestOddNumberLessThanN = N % 2 == 0 ? N - 1 : N - 2; 
for (i = largestOddNumberLessThanN; i >= 0; i -= 2) 
    addVertex(i) 
संबंधित मुद्दे