2012-02-28 21 views
19

मैं निम्न स्वरूपएक ग्रिड आधारित समोच्च प्रारूप

06 36 39 42 43 55 ... 
37 40 43 43 45 46 ... 
40 43 44 45 46 48 ... 
44 44 46 47 48 50 ... 
41 44 45 47 48 48 ... 
... 

में एक 2 डी ऊंचाई नक्शा करने के लिए एक ऊँचाई मानचित्र मानचित्रण और मैं (इसलिए यह आगे मैप किया जा सकता एक मुस्कराहट आधारित समोच्च प्रारूप में यह पुन: मैप करने की जरूरत है स्प्राइट में)

. . . . | . . 
. . . . \ . . 
. . .// . . 
. . . | . . . 
. . . | . . . 
./-/. . . 

यहाँ . अर्थ समतल क्षेत्र, | और - सीधे चट्टानों, / और \ चट्टान कोनों (प्रत्येक का प्रतिनिधित्व 2 अलग अलग संभावनाएं)।

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

. . . . | . \ 
. . . . \ \ . 
. . .// - . 
. . . | - . . 
. . . | . . . 
./-/. . . 

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

+0

कर सकते हैं | - (बहुत छोटा {, /,,} है आपकी आकृति की एक-दूसरे को ओवरलैप करता है, तो अपने समोच्च ऊंचाइयों के बीच का अंतर बहुत छोटा है आप किसी दिए गए समोच्च, संभावनाओं के सेट के साथ संतुष्ट नहीं हैं।।) आप अपने पड़ोसी वर्गों को 3 पड़ोसियों के साथ थोड़ा और समझते हैं? मुझे लगता है कि मार्चिंग वर्ग '(height_map - दहलीज) 'के शून्य-क्रॉसिंग को प्रस्तुत करने के लिए आदर्श है। – YXD

+0

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

+0

वह फ़ंक्शन क्या है जो आपके 2 डी ऊंचाई मानचित्र को आपके ग्रिन आधारित मानचित्र से संबंधित करता है? क्या आप मानचित्र में संग्रहीत संख्या के आधार पर एक प्रतीक असाइन करते हैं, प्रत्येक प्रतीक अपने पड़ोसियों पर भी निर्भर करता है? –

उत्तर

1

एक इंटरपोलिंग/सर्वश्रेष्ठ फिट फ़ंक्शन बनाएं। आपका मॉडल 2 डी बहुपद (x और y में) होना चाहिए, जिसकी डिग्री "बस सही" है: बहुत अधिक नहीं है कि आप सब कुछ खत्म कर देंगे, लेकिन बहुत कम नहीं है ताकि आप विस्तार खो सकें।

अब आपके पास गणितीय फ़ंक्शन है जिसे आप f(x,y) = height सेट करके स्लाइस कर सकते हैं। इस समीकरण का समाधान एक समोच्च है। विश्लेषणात्मक रूप से हल कर सकते हैं या नहीं, इस पर निर्भर करते हुए अब आपके पास दो विकल्प हैं।

  • मान लिया जाये कि आप विश्लेषणात्मक समाधान नहीं कर सकते, तो भी आप आसानी से बाहर वक्र के एक सन्निकटन ट्रेस कर सकते हैं:
    • ग्रिड सफेद यदि f(x,y)>height और काले यदि f(x,y)<height रंग द्वारा शुरू करो। सभी "संक्रमण" क्षेत्रों पर ध्यान दें जहां लगभग < 1 ग्रिड दूर एक काला-सफेद संक्रमण है: ये वर्गों में समेकित वर्ग होंगे।
    • यादृच्छिक रूप से एक संक्रमण वर्ग चुनें, और लगभग < 1 ग्रिड त्रिज्या के भीतर खोजें समोच्च पर एक बिंदु खोजने के लिए f(x,y)==height के लिए। उस बिंदु पर (ग्रिड पर जरूरी नहीं) हम ढाल ∇f(x,y) = (∂f/∂x, ∂f/∂y) ("चढ़ाई वेक्टर") की गणना करते हैं। हम इसे किसी भी दिशा में 90 डिग्री घुमाते हैं: (∂f/∂y, -∂f/∂x): इस तरह समोच्च के साथ बिंदु। हम बहुत धीरे-धीरे (ग्रिड से बहुत छोटे आकार के साथ) समोच्च का पता लगाते हैं। यह हमें एक समोच्च के चारों तरफ ले जाएगा।
    • हर बार जब हम इस ट्रेस के दौरान ग्रिडबॉक्स से गुज़रते हैं, तो हम इसे किसी भी दिशा के आधार पर लेबल करते हैं, जैसे कि ढाल के औसत की दिशा किस दिशा में इंगित करती है। (हमें पड़ोसियों को . के रूप में लेबल करना होगा यदि उन्हें अभी तक लेबल नहीं किया गया है; [*] देखें।)
    • ध्यान दें कि उसके बाद अभी भी संक्रमण ग्रिडबॉक्स शेष हो सकते हैं! उदाहरण के लिए, यदि आपके पास दो पहाड़ियों हैं, तो आप एक सर्कल में भर जाएंगे, लेकिन समोच्च दो मंडल है। उपरोक्त प्रक्रिया को किसी अन्य यादृच्छिक (लेबल रहित) "संक्रमण" ग्रिडबॉक्स पर दोहराएं (यही कारण है कि हमें [*] की आवश्यकता है, अन्यथा हम उन स्पॉट्स के पड़ोसियों पर फ़िक्सेट कर सकते हैं जिनके लिए हम पहले ही खाते हैं)।तब तक दोहराएं जब तक कोई और लेबल नहीं किया गया "संक्रमण" ग्रिडबॉक्स।
    • प्रत्येक height स्तर आप एक समोच्च के रूप में आकर्षित करने के लिए इच्छा के लिए ऐसा करें, और आप काम हो गया।
  • आप विश्लेषणात्मक रूप से हल करने में सक्षम हो सकते हैं जैसे कि आप शंकु वर्गों के लिए करेंगे, लेकिन संभवतः यह इस प्रश्न के दायरे से अधिक नहीं है। आप वक्र के लिए हल कर सकते थे, तो आप इसे "gridify" सकता है विभिन्न तकनीकों का उपयोग (जैसे यह parameterize, तो समोच्च शायद आधा ग्रिड के कदम आकार का उपयोग करते हुए साथ चलना, निकटतम-पड़ोसियों टिप्पण)

+0

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

+0

@ वाउटर लाइवेन्स: मैंने कभी भी सर्वश्रेष्ठ फिट फ़ंक्शन का सुझाव नहीं दिया; वह बुरा होगा। पहले अनुच्छेद में, मैंने विशेष रूप से सुझाव दिया कि उसे "2 डी बहुपद" चुनना चाहिए, जिसकी डिग्री "ठीक है": बहुत अधिक नहीं है कि आप सब कुछ खत्म कर देंगे, लेकिन बहुत कम नहीं है ताकि आप विस्तार खो सकें "। – ninjagecko

+0

मैं इसे समझता हूं। मैं समझ में नहीं आता कि आप अंक कैसे क्रमबद्ध करेंगे। अगर वह उन्हें सॉर्ट कर सकता है, तो वह कनेक्ट-द-डॉट्स को भी जोड़ सकता है और उसे चिकना कर सकता है। –

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