33

मैं 2-आयामी निरंतर डेटा के लिए विज़ुअलाइजेशन प्रोजेक्ट पर काम कर रहा हूं। यह एक ऐसी चीज है जिसका उपयोग आप 2 डी मानचित्र पर ऊंचाई डेटा या तापमान पैटर्न का अध्ययन करने के लिए कर सकते हैं। इसके मूल में, यह वास्तव में दो-आयामों-प्लस-रंग में 3-आयामों को फ़्लैट करने का एक तरीका है। अध्ययन के अपने विशेष क्षेत्र में, मैं वास्तव में भौगोलिक ऊंचाई डेटा के साथ काम नहीं कर रहा हूं, लेकिन यह एक अच्छा रूपक है, इसलिए मैं इस पोस्ट में इसके साथ रहूंगा।एक भौगोलिक मानचित्र चित्रण

Continuous Color Renderer

ढाल मानक रंग पहिया, जहां लाल पिक्सल के साथ निर्देशांक संकेत मिलता है:

किसी भी तरह, इस बिंदु पर, मैं एक "सतत रंग" रेंडरर है कि मैं के साथ बहुत खुश हूँ है उच्च मूल्य, और बैंगनी पिक्सेल कम मान इंगित करता है।

अंतर्निहित डेटा संरचना मानचित्र के विवरण में मनमाने ढंग से गहरी ज़ूमिंग सक्षम करने के लिए कुछ बहुत चालाक (यदि मैं खुद ऐसा कहता हूं) इंटरपोलेशन एल्गोरिदम का उपयोग करता है।

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

आप मैं क्या सोच रहा हूँ के लिए एक विचार देने के लिए, यहाँ एक गरीब आदमी के कार्यान्वयन है (जहां रेंडरर सिर्फ एक काला आरजीबी मान का उपयोग करता जब भी यह एक पिक्सेल है कि एक समोच्च रेखा काटती है मुठभेड़ों):

Continuous Color with Ghetto Topo Lines

वहाँ इस दृष्टिकोण के साथ कई समस्याएं हैं, हालांकि इस प्रकार हैं:

  • पतली (और अक्सर टूट) टोपो लाइनों में बाद एक बड़े ढलान परिणाम के साथ ग्राफ के क्षेत्र। आदर्श रूप में, सभी टॉपो लाइनों को निरंतर होना चाहिए।

  • चापलूसी ढलान वाले ग्राफ के क्षेत्र व्यापक शीर्ष रेखाओं (और अक्सर काले रंग के पूरे क्षेत्र, विशेष रूप से प्रतिपादन क्षेत्र के बाहरी परिधि में) के परिणामस्वरूप होते हैं।

तो मैं उन अच्छे, सही 1-पिक्सेल-मोटी घटता प्राप्त करने के लिए वेक्टर-ड्राइंग दृष्टिकोण देख रहा हूं। एल्गोरिथ्म के बुनियादी ढांचे को इन चरणों का शामिल करना होगा:

  1. प्रत्येक असतत ऊंचाई पर जहां मैं एक टोपो रेखा खींचना निर्देशांक जहां कि कम से ऊंचाई समन्वय का एक सेट लगाना चाहते हैं बेहद करीब है (दिए गए एक मनमानी ईपीएसलॉन मूल्य) वांछित ऊंचाई पर।

  2. अनावश्यक बिंदुओं को हटा दें। उदाहरण के लिए, यदि तीन बिंदु पूरी तरह से सीधी रेखा में हैं, तो केंद्र बिंदु अनावश्यक है, क्योंकि इसे वक्र के आकार को बदलने के बिना समाप्त किया जा सकता है। इसी तरह, बेजियर वक्र के साथ, आसन्न नियंत्रण बिंदुओं की स्थिति को समायोजित करके अक्सर केटेन एंकर पॉइंट को खत्म करना संभव होता है।

  3. शेष बिंदुओं को एक अनुक्रम में इकट्ठा करें, जैसे कि दो बिंदुओं के बीच प्रत्येक सेगमेंट ऊंचाई-तटस्थ प्रक्षेपवक्र का अनुमान लगाता है, और ऐसा कोई भी दो रेखा खंड कभी पथ पार नहीं करता है। प्रत्येक बिंदु अनुक्रम को या तो एक बंद बहुभुज बनाना चाहिए, या प्रतिपादन क्षेत्र के बाध्यकारी बॉक्स को छेड़छाड़ करना चाहिए।

  4. प्रत्येक चरम के लिए, नियंत्रण बिंदुओं की एक जोड़ी खोजें जैसे परिणामस्वरूप वक्र चरण # 2 में समाप्त अनावश्यक बिंदुओं के संबंध में न्यूनतम त्रुटि प्रदर्शित करता है।

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

लेकिन फिर भी उन सीमा के अन्दर, मैं अभी भी लाइनों को खोजने के लिए कई अलग अलग heuristics के बारे में सोच सकते हैं:

  • प्रतिपादन बाउंडिंग बॉक्स के भीतर उच्च बिंदु का पता लगाएं। उस उच्च बिंदु से, कई अलग-अलग ट्रैजेक्टोरियों के साथ डाउनहिल यात्रा करें। किसी भी समय ट्रैवर्सल लाइन ऊंचाई ऊंचाई को पार करती है, उस बिंदु को ऊंचाई-विशिष्ट बाल्टी में जोड़ें। जब ट्रैवर्सल पथ स्थानीय न्यूनतम तक पहुंचता है, पाठ्यक्रम बदलता है और चढ़ाई करता है।

  • प्रतिपादन क्षेत्र के आयताकार सीमा-बॉक्स के साथ एक उच्च-रिज़ॉल्यूशन ट्रैवर्सल करें। प्रत्येक ऊंचाई सीमा पर (और घुमावदार बिंदुओं पर, जहां भी ढलान दिशा को उलट देता है), उन बिंदुओं को ऊंचाई-विशिष्ट बाल्टी में जोड़ें। सीमा पार करने के बाद, उन बाल्टीओं में सीमा बिंदुओं से अंदर की ओर ट्रेसिंग शुरू करें।

  • पूरे प्रतिपादन क्षेत्र को स्कैन करें, एक दुर्लभ नियमित अंतराल पर ऊंचाई माप लेना। प्रत्येक माप के लिए, यह तय करने के लिए एक तंत्र के रूप में एक ऊंचाई सीमा के लिए इसकी निकटता का उपयोग करें कि अपने पड़ोसियों के एक अंतरित माप को लेना है या नहीं। इस तकनीक का उपयोग करते हुए पूरे प्रतिपादन पूरे क्षेत्र में कवरेज की बेहतर गारंटी प्रदान होगा, लेकिन यह पथ के निर्माण के लिए एक समझदार क्रम में परिणामी अंक इकट्ठा करने के लिए मुश्किल होगा।

तो, उन मेरे विचारों में से कुछ हैं ...

एक कार्यान्वयन में गहरी डाइविंग से पहले, मैं चाहे StackOverflow पर किसी और को इस समस्या की इस तरह के साथ अनुभव है देखना चाहता था और के लिए संकेत प्रदान कर सकता है एक सटीक और कुशल कार्यान्वयन।

संपादित करें:

मैं विशेष रूप से ellisbben द्वारा किए गए "ढाल" सुझाव में दिलचस्पी रखता हूँ। और मेरे कोर डेटा संरचना (अनुकूलन के प्रक्षेप से कुछ शॉर्टकट अनदेखी) 2D गाऊसी कार्यों का एक सेट है, जो पूरी तरह से विभेदक है के संकलन के रूप में प्रतिनिधित्व किया जा सकता है।

मुझे लगता है मैं एक तीन आयामी ढाल, और मनमाने ढंग से बिंदु पर के लिए कि ढलान वेक्टर की गणना के लिए एक समारोह का प्रतिनिधित्व करने के लिए एक डेटा संरचना की आवश्यकता होगी लगता है। मेरे सिर के ऊपर से, मुझे लगता है कि कैसे करना है (हालांकि यह है कि यह आसान होना चाहिए लगता है) पता नहीं है, लेकिन यदि आप गणित समझा एक कड़ी है, मैं बहुत आभारी होगी!

अद्यतन:

ellisbben और अजीम द्वारा उत्कृष्ट योगदान के लिए धन्यवाद, मैं अब क्षेत्र में किसी भी मनमाना बिंदु के लिए समोच्च कोण की गणना कर सकते हैं। ड्राइंग असली टोपो लाइनों शीघ्र ही पालन करेंगे!

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

आनंद लें!

(नोट: -, के बाद से मैं बेतरतीब ढंग से प्रत्येक यात्रा पर डेटा संरचनाओं उत्पन्न जबकि मैं प्रोटोटाइप हूँ - ये प्रतिपादन पिछले प्रतिपादन तुलना में एक अलग सतह स्थलाकृति का उपयोग लेकिन कोर प्रतिपादन विधि एक ही है, इसलिए मैं 'सुनिश्चित करें कि आप अंदाजा हो रहा हूँ)

alt text

alt text

यहाँ एक मजेदार तथ्य है:। इन प्रतिपादन के दाएँ हाथ की साइड पर अधिक है, तो आप अजीब समोच्च के एक झुंड देखेंगे सही क्षैतिज और ऊर्ध्वाधर पर लाइनें ical कोण। ये इंटरपोलेशन प्रक्रिया की कलाकृतियों हैं, जो मुख्य प्रतिपादन संचालन करने के लिए आवश्यक गणनाओं की संख्या (लगभग 500%) को कम करने के लिए इंटरपोलेटर के ग्रिड का उपयोग करती हैं। उन सभी अजीब समोच्च रेखाएं दो इंटरपोलेटर ग्रिड कोशिकाओं के बीच की सीमा पर होती हैं।

सौभाग्य से, उन कलाकृतियों वास्तव में कोई फर्क नहीं पड़ता। यद्यपि कलाकृतियों ढलान गणना के दौरान पता लगाने योग्य हैं, अंतिम प्रस्तुतकर्ता उन्हें नोटिस नहीं करेगा, क्योंकि यह एक अलग गहराई से संचालित होता है।


अपडेट को पुन:

Aaaaaaaand, एक अंतिम भोग के रूप में इससे पहले कि मैं सो जाओ, यहां 20,000 ढाल नमूने के साथ प्रतिपादन का एक और जोड़ी, ओल्ड-स्कूल में एक "सतत रंग" शैली, और एक है । प्रस्तुतिकरण के इस सेट में, मैंने बिंदु-नमूने के लिए लाल बिंदु को समाप्त कर दिया है, क्योंकि यह अनावश्यक रूप से छवि को अव्यवस्थित करता है।

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

बॉन एपेटिट !!

alt text

alt text

+0

आप मौजूदा लाइब्रेरी, टूल (जैसे कि gnuplot, tecplot) का उपयोग क्यों नहीं करते? – jfs

+0

आप कहते हैं कि डेटा निरंतर है - क्या इसका मतलब यह है कि आप एल्गोरिदमिक रूप से अंतर-पिक्सेल निर्देशांक के मानों की गणना कर सकते हैं? – Alnitak

+0

हाँ, मैं किसी भी समन्वय (64-बिट फ्लोटिंग पॉइंट परिशुद्धता के साथ) पर मान की गणना कर सकता हूं। डेटा संरचना वास्तव में 2 डी गाऊसी कार्यों का संग्रह है, प्रत्येक के अपने आयाम और मानक विचलन के साथ, और इंटरपोलेशन उन मध्यवर्ती मूल्यों को खोजने के लिए कर्नेल घनत्व अनुमानक का उपयोग करता है। – benjismith

उत्तर

9

gradient एक गणितीय ऑपरेटर है जो आपकी मदद कर सकता है।

यदि आप अपने इंटरपोलेशन को एक अलग-अलग कार्य में बदल सकते हैं, तो ऊंचाई का ढाल हमेशा सबसे तेज चढ़ाई की दिशा में इंगित करेगा। समान ऊंचाई के सभी घटता उस बिंदु पर मूल्यांकन की ऊंचाई के ढाल के लिए लंबवत हैं।

उच्चतम बिंदु से शुरू करने के बारे में आपका विचार समझदार है, लेकिन यदि एक से अधिक स्थानीय अधिकतम हैं तो सुविधाओं को याद कर सकते हैं।

मैं

  1. पिकअप ऊंचाई के मान को, जिस पर आप लाइनों
  2. आकर्षित करेगा जुर्माना, नियमित रूप से स्थान दिया गया है ग्रिड पर अंक का एक समूह बनाने के लिए, तो ढाल दिशा में छोटे चरणों में प्रत्येक बिंदु चलना सुझाव देंगे निकटतम ऊंचाई की ओर जहां आप एक रेखा
  3. ढाल बनाना चाहते हैं, प्रत्येक बिंदु को लंबवत के लिए लंबवत करके वक्र बनाएं; एक बिंदु को मार कर अतिरिक्त बिंदुओं को खत्म करें जब एक और वक्र इसके बहुत करीब आता है - लेकिन आंकड़ों की तरह घंटे का चश्मा केंद्र को नष्ट करने से बचने के लिए, आपको दोनों बिंदुओं के लिए उन्मुख वेक्टर लंबवत के बीच कोण को जांचने की आवश्यकता हो सकती है। (जब मैं उन्मुख कहना, मुझे यकीन है कि ढाल और सीधा मूल्य आप की गणना के बीच के कोण हमेशा 90 डिग्री एक ही दिशा में है मतलब है।)
+0

बहुत अच्छा। अतिरिक्त स्पष्टीकरण प्रश्नों के लिए मेरा सबसे हालिया संपादन देखें। – benjismith

0

मैं हमेशा अपने दम पर गहरा करने के लिए जा :)

हो सकता है कि उनके curves अनुभाग में मदद मिलेगी से पहले http://mathworld.wolfram.com जैसी जगहों की जांच? या शायद maps पर प्रविष्टि।

0

जो आपने वास्तविक दुनिया के शीर्ष मानचित्र के साथ प्रस्तुत किया है उसकी तुलना करें - वे मेरे समान दिखते हैं! मैं एक चीज़ नहीं बदलेगा ...

+0

ठीक है, लाइनों की * स्थिति * अभी बहुत अच्छी हैं। लेकिन रेखाएं खुद टूट गई हैं और गंदे और मैला दिख रही हैं। टॉपो लाइनों को ड्रॉइंग (... cont'd ...) – benjismith

+0

... बेजियर वक्र (मुझे लगता है) एक बहुत अच्छा सफाई प्रदान करेगा। लेकिन यह कुछ बोनस लाभ भी देगा, जैसे माउस क्लिक के साथ चयन क्षेत्र को चुनने योग्य बनाना (जो बहुत ही अच्छा होगा!) – benjismith

3

वैकल्पिक रूप से, वहाँ marching squares एल्गोरिथ्म जो करने के लिए उपयुक्त लगता है आपके समस्या, यद्यपि आप मोटे ग्रिड का उपयोग करते हुए परिणामों को सुचारू बनाना चाहते हैं।

शीर्ष आयाम जिन्हें आप आकर्षित करना चाहते हैं isosurfaces 2 आयामों पर स्केलर फ़ील्ड के हैं। 3 आयामों में isosurfaces के लिए, marching cubes एल्गोरिदम है।

2

मुझे ऐसा कुछ चाहिए था, लेकिन वेक्टर-आधारित समाधान नहीं मिला है।

एक रास्टर-आधारित समाधान इतना बुरा नहीं है, हालांकि, विशेष रूप से यदि आपका डेटा रास्टर-आधारित है। यदि आपका डेटा वेक्टर-आधारित भी है (दूसरे शब्दों में, आपके पास अपनी सतह का 3 डी मॉडल है), तो आप अलग-अलग ऊंचाई पर क्षैतिज विमानों के साथ छेड़छाड़ घटता खोजने के लिए कुछ वास्तविक गणित करने में सक्षम होना चाहिए।

रास्टर-आधारित दृष्टिकोण के लिए, मैं पड़ोसी पिक्सेल की प्रत्येक जोड़ी को देखता हूं। यदि कोई समोच्च स्तर से ऊपर है, और एक नीचे है, तो स्पष्ट रूप से उनके बीच एक समोच्च रेखा चलती है। कॉन्टूर लाइन को एंटी-एलियास के लिए इस्तेमाल की जाने वाली चाल को समोच्च रेखा रंग को पिक्सेल में मिश्रित करना है, जो आदर्शीकृत समोच्च रेखा के निकटता के आनुपातिक है।

शायद कुछ उदाहरण मदद करेंगे। मान लीजिए कि वर्तमान पिक्सेल 12 फीट की "ऊंचाई" पर है, एक पड़ोसी 8 फीट की ऊंचाई पर है, और समोच्च रेखाएं प्रत्येक 10 फीट हैं। फिर, बीच में एक समोच्च रेखा आधा रास्ता है; 50% अस्पष्टता पर समोच्च रेखा रंग के साथ वर्तमान पिक्सेल पेंट करें। एक और पिक्सेल 11 फीट पर है और 6 पड़ोसी पड़ोसी है। मौजूदा पिक्सेल को 80% अस्पष्टता पर रंग दें।

alpha = (contour - neighbor)/(current - neighbor) 

दुर्भाग्य से, मैं कोड काम नहीं है, और यह करने के लिए थोड़ा और वहाँ गया हो सकता है (मैं थोड़ा विकर्ण पड़ोसियों भी पर देख रहे हैं कॉल, और sqrt(2)/2 द्वारा व्यवस्थित)। मुझे आशा है कि यह आपको पर्याप्त जानकारी देगा।

+0

मेरे पास 3 डी मॉडल नहीं है, लेकिन मेरे सिस्टम में कोई भी सतह एक समीकरण के रूप में प्रतिनिधित्व योग्य है, इसलिए यह निश्चित रूप से मनमाने ढंग से सटीक वेक्टर प्रतिनिधित्व के रूप में योग्यता प्राप्त करती है। लेकिन समीकरण biiiiiiig और बुरा है। उदाहरण के लिए, इस पृष्ठ की छवि 300 से अधिक शर्तों के साथ समीकरण का उपयोग करती है। यह बदसूरत बदसूरत है। – benjismith

+0

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

+0

मुझे यह निर्धारित करने के आपके दृष्टिकोण पसंद हैं कि समोच्च रेखा * दो पिक्सेल के बीच * चलती है या नहीं। मेरे प्रतिपादन (ऊपर) में जो दृष्टिकोण मैंने लिया था, यह देखने के लिए था कि कुछ मनमानी ईपीएसलॉन दिए गए पिक्सेल मान वास्तविक समोच्च रेखा के करीब * बंद * थे या नहीं। (... जारी रहा ...) – benjismith

3

@erickson पर आपकी टिप्पणी के जवाब में और आपके फ़ंक्शन के ढाल की गणना के बारे में बिंदु का उत्तर देने के लिए। अपने 300 टर्म फ़ंक्शन के डेरिवेटिव की गणना करने के बजाय आप निम्नानुसार एक संख्यात्मक भेदभाव कर सकते हैं।

अपनी छवि में एक बिंदु [एक्स, वाई] को देखते हुए आप ढाल गणना कर सकते हैं (तेज सभ्य की दिशा)

g={ (f(x+dx,y)-f(x-dx,y))/(2*dx), 
    { (f(x,y+dy)-f(x,y-dy))/(2*dy) 

जहां dx और डीवाई अपने ग्रिड में अंतर हो सकता है। समोच्च रेखा ढाल के लिए लंबवत चलती है। तो, समोच्च दिशा प्राप्त करने के लिए, ग, हम गुणा कर सकते हैं जी = [v, w] मैट्रिक्स द्वारा, एक = [0 -1, 1 0] दे

c = [-w,v] 
+0

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

+0

आपका स्वागत है। खुशी है कि यह मदद की। – Azim

1

यह मेरे लिए हुआ है कि तुम क्या कर रहे हैं कि ऐसा करने की कोशिश कर रहे हैं कॉन्टूर फ़ंक्शन का उपयोग करके MATLAB में करना बहुत आसान होगा। अपने समोच्चों को कम घनत्व अनुमान बनाने जैसी चीजों को करने से संभवतः समोच्चों के कुछ सरल पोस्ट-प्रोसेसिंग के साथ किया जा सकता है।

सौभाग्य से, एक MATLAB क्लोन जीएनयू ऑक्टेव में विभिन्न समोच्च साजिश कार्यों का कार्यान्वयन है। आप उस कोड को एल्गोरिदम और कार्यान्वयन के लिए देख सकते हैं जो लगभग निश्चित रूप से गणितीय ध्वनि है। या, आप बस ऑक्टेव में प्रसंस्करण को ऑफ़लोड करने में सक्षम हो सकते हैं। यह देखने के लिए कि क्या यह आसान होगा, interfacing with other languages पर पृष्ठ देखें।

प्रकटीकरण: मैंने ऑक्टेव का बहुत उपयोग नहीं किया है, और मैंने वास्तव में इसकी समोच्च साजिश का परीक्षण नहीं किया है। हालांकि, MATLAB के साथ अपने अनुभव से, मैं कह सकता हूं कि यह आपको कोड की कुछ पंक्तियों में लगभग हर चीज देगा जो आपको मांगेगा, बशर्ते आप अपना डेटा MATLAB में प्राप्त करें।

इसके अलावा, एक बहुत ही वैनगो-एस्क स्लोपफील्ड प्लॉट बनाने पर बधाई।

0

डेटा को HGT file (यूएसजीएस द्वारा उपयोग किए जाने वाले बहुत ही सरल डिजिटल एलिमेंट डेटा प्रारूप) के रूप में लिखें और समोच्च बनाने के लिए मुक्त और मुक्त स्रोत gdal_contour टूल का उपयोग करें। यह स्थलीय मानचित्रों के लिए बहुत अच्छी तरह से काम करता है, यह बाधा यह है कि डेटा बिंदु 16-बिट संख्याओं पर हस्ताक्षर किए जाते हैं, जो मीटर में बहुत अच्छी तरह से ऊंचाई की पृथ्वी की सीमा को फिट करता है, लेकिन हो सकता है कि आपके डेटा के लिए पर्याप्त न हो, जो मुझे लगता है कि मैं नहीं होना चाहता वास्तविक इलाके का नक्शा - हालांकि आप इलाके के नक्शे का जिक्र करते हैं।

0

मैं CONREC दृष्टिकोण की सिफारिश:

  • एक खाली रेखा खंड सूची
  • नियमित ग्रिड वर्गों
  • प्रत्येक ग्रिड वर्ग के लिए में अपने डेटा को विभाजित बनाएँ, 4 घटक त्रिभुजों में वर्ग विभाजित:
    • प्रत्येक त्रिकोण के लिए, मामलों को संभालें (जे के माध्यम से):
      • यदि कोई लाइन सेगमेंट टी में से एक को पार करता है वह मामलों:
        • अपने अंतिम बिंदु
        • स्टोर सूची में रेखा खंड की गणना
  • रेखा खंड सूची

लाइनों हैं में प्रत्येक पंक्ति खंड ड्रा बहुत जंजीर हैं, एक छोटे ग्रिड का उपयोग करें। यदि रेखाएं काफी चिकनी हैं और एल्गोरिदम बहुत अधिक समय ले रहा है, तो एक बड़ा ग्रिड का उपयोग करें।

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