वक्र सेगमेंट की सीधी माप (पॉलीलाइन के रूप में दर्शाई गई)


11

मैं एक स्वचालित ऊंचाई समोच्च लेबलिंग एल्गोरिथ्म पर काम कर रहा हूं और उन कारकों में से एक है जो मैं तब ध्यान रखना चाहता हूं जब लेबल की स्थिति तय करना एक समोच्च का एक विशेष खंड "सीधा" कैसे होता है। यह जितना सीधा होगा, लेबल को उस सेगमेंट पर लगाने की उतनी ही अधिक संभावना होगी।

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

मैंने उत्तर खोजे हैं, लेकिन मुझे वास्तव में उपयोगी कुछ भी नहीं मिला। मैं किसी भी संकेत के लिए आभारी रहूँगा।

जवाबों:


9

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

उदाहरण के लिए, मान लीजिए कि आप एक व्यवस्थित खोज करने का इरादा रखते हैंसमोच्च के पूरे जुड़े घटक में, बिंदु P (0), P (1), ..., P (n) के अनुक्रम के रूप में दर्शाया गया है। यह एक पॉइंटर (अनुक्रम में अनुक्रमणिका) s = 0 ("शुरू" के लिए "s") और दूसरा पॉइंटर f ("फ़िनिश") के लिए सबसे छोटा इंडेक्स होगा जिससे दूरी (P (f), P (s))> = 100, और फिर दूरी के रूप में लंबे समय के लिए आगे बढ़ना (P (f), P (s + 1))> = 100. इससे एक उम्मीदवार पॉलीलाइन (P), P (s +) उत्पन्न होता है 1) ..., मूल्यांकन के लिए पी (एफ -1), पी (एफ))। एक लेबल का समर्थन करने के लिए इसकी "फिटनेस" का मूल्यांकन करने के बाद, आप तब 1 (s = s + 1) द्वारा वेतन वृद्धि करेंगे और f (s) f 'और' s 'को बढ़ाने के लिए आगे बढ़ेंगे जब तक कि एक उम्मीदवार पॉलीलाइन न्यूनतम से अधिक न हो जाए। 100 की अवधि का उत्पादन किया जाता है, (P (s '), ... P (f), P (f + 1), ..., P (f')) के रूप में दर्शाया जाता है। ऐसा करने में, लंबित P (s) ... P (s) यह अत्यधिक वांछनीय है कि फिटनेस को केवल गिराए गए और जोड़े गए कोने के ज्ञान से तेजी से अपडेट किया जा सकता है। (यह स्कैनिंग प्रक्रिया तब तक जारी रहेगी जब तक s = n; सामान्य रूप से, f को प्रक्रिया में n बैक से 0 तक "चारों ओर" लपेटने की अनुमति दी जानी चाहिए।)

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

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

इस एल्गोरिथम के परिणाम का एक उदाहरण यहां दिया गया है। काले डॉट्स एक समोच्च के कोने हैं। ठोस लाल रेखा उस समोच्च के भीतर 100 से अधिक अंत तक की सबसे अच्छी उम्मीदवार पॉलीलाइन खंड है। (ऊपरी दाएं में स्पष्ट रूप से स्पष्ट उम्मीदवार काफी लंबा नहीं है।)

आकृति


वाह, तुम मुझे वहाँ खो दिया :)। आप व्यवस्थित खोज के बारे में सही हैं, मुझे पहले से ही यह करना है कि प्रत्येक पॉलीलाइन / बहुभुज शीर्ष (क्षैतिज लेबल को ऊर्ध्वाधर वाले के लिए पसंद किया जाता है) की स्पर्शरेखा प्राप्त करने के लिए, इसलिए सिद्धांत रूप में मैं इस खोज को अन्य मापों को कवर करने के लिए बढ़ा सकता हूं। BTW: क्या आपने वास्तविक एल्गोरिथ्म या मैन्युअल रूप से नमूना प्लॉट का उत्पादन किया था?
इगोर ब्रेजक

1
चित्रण वास्तविक है, लेकिन मैंने जिस कार्यान्वयन का उपयोग किया है वह सहसंयोजक अद्यतन प्रक्रिया का उपयोग नहीं करता है और इसलिए कम्प्यूटेशनल रूप से इष्टतम नहीं है।
whuber

2
अंत में ग्राफ इस जवाब को और भी भयानक बनाता है
रागी यासर बुरहुम

2
इगोर, मुझे यह उल्लेख करना चाहिए कि लेबल की दिशा मुफ्त में आती है: यह दीर्घवृत्त के प्रमुख अक्ष (बड़े प्रतिजन से जुड़े प्रतिजन) की दिशा द्वारा दिया गया है। इसलिए आप एक साथ लेबल अभिविन्यास और समोच्च अनुभाग रैखिकता के सर्वोत्तम संयोजन के लिए एक कुशल तरीके से खोज सकते हैं।
whuber

3

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


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

1
आपको यहाँ GIS पृष्ठों पर, जोसफ को देखकर अच्छा लगा!
व्हीबर

1
हां, मेरे पास अभी आपके हाथों में "कम्प्यूटेशनल जियोमेट्री इन सी" पुस्तक है :)
इगोर ब्रीज

1
स्वागत के लिए धन्यवाद, सब लोग! :-) मुझे पता है कि मेरा सुझाव आदर्श उपाय नहीं है, लेकिन कोडिंग ऑफ-द-शेल्फ (यदि आपके पास सही शेल्फ है)। विनिर्माण संदर्भों में इस तरह की समस्या का काफी अध्ययन किया गया है, जहां उन्हें मशीनीकृत भाग की गुणवत्ता को मापने की आवश्यकता होती है।
जोसेफ ओ'रोरके

3

मुझे पता नहीं है कि क्या यह मदद करता है, या भले ही यह एक उत्तर के रूप में गिना जाता है, लेकिन जैसा कि मैं यहां पर उस प्रश्न के बारे में सोच रहा था जिसे मैंने पोस्ट किया था, मेरे पास एक विचार था:

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

आप यह पता लगा सकते हैं कि किस लंबाई को सीधेपन का सबसे अच्छा संकेतक दिया जाएगा, और प्रत्येक समोच्च रेखा के साथ कदम रखने के लिए एक दिनचर्या निर्धारित करें और जहां यह काफी सीधा था, लेबल लगाएं।

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


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

3

सबसे आसान तरीका जो मैं सोच सकता हूं, वह शुरुआत और अंत के बीच की वास्तविक पथ लंबाई और शुरुआत से अंत बिंदु तक की सबसे छोटी दूरी (सीधी रेखा) के बीच का अनुपात है। सीधी रेखाओं में अनुपात एक के करीब होगा जबकि बहुत घुमावदार रेखाओं का अनुपात बहुत अधिक होगा।

समाधान को लागू करने के लिए यह वास्तव में आसान होना चाहिए।


अद्यतन: जैसा कि माइक ने सही ढंग से देखा, यह साइनसिटी के बराबर होगा ।

यहाँ छवि विवरण दर्ज करें


रेक्स का जवाब पढ़ने के बाद बस मेरे दिमाग में क्या आया :)
इगोर ब्रेक्ज

4
मूल रूप से सिनुओसिटी
माइक टी

वास्तव में :) ....
UnderDark

2
आप सही हैं कि इसे लागू करना आसान होगा, क्योंकि लेबल के लिए उपयुक्त सेगमेंट के लिए एक खोज के रूप में लंबाई को अपडेट करना उतना ही सरल है जितना कि क्रमिक लंबाई के बीच लंबाई जोड़ना और घटाना। हालाँकि, सिनुओसिटी उस अर्थ को प्रभावी ढंग से पकड़ नहीं पाती है जिसमें एक वक्र रैखिकता से प्रस्थान कर सकता है। उदाहरण के लिए, व्यास 1 के अर्धवृत्त के व्यास के व्यास के एक अर्धवृत्त की तुलना करें 1 : दोनों वक्रों में एक ही सिनुओसिटी है, लेकिन पहले की ओर का विचलन दूसरी बार के 100 गुना है (जो अच्छा आधार होगा) एक लेबल के लिए)।
whuber

इस बात पर ध्यान दें कि यदि आपकी पॉलीलाइन एक वृत्त खींचती है तो यह विधि आपको एक असीम पापुक्ति प्रदान करेगी जो कि शायद वांछित परिणाम नहीं है।
18'18

1

"वक्रता" और "पॉलीलाइन" की खोज करके, मुझे यह जानकारी मिली कि मैं एक पॉलीलाइन की वक्रता कैसे पा सकता हूं? । वहां उन्होंने वक्रता की परिभाषा पर वापस जाने का सुझाव दिया - K= DF/Ds। यहाँ Fउनका अर्थ है phi, या Tविकिपीडिया के संकेतन में यहाँ ( http://en.wikipedia.org/wiki/Curvature )।

मान लें कि आपके पास तीन अंक हैं, p0, p1 और P2। sp0 और p1 के बीच की दूरी की गणना करें , जो s ( Ds) का डेल्टा है , यह मानते हुए कि बिंदु एक दूसरे के काफी करीब हैं। तब आपको टी ( DT) के डेल्टा की आवश्यकता होती है, जो कि p0 और p1 के बीच इकाई स्पर्शरेखा वेक्टर में परिवर्तन होता है। परिष्कृत तरीका हो सकता है लेकिन क्रूड विधि मैं दो बीटरों p0-> p1, p1-> P2 को लेने के लिए सोच सकता हूं, प्रत्येक को एक की लंबाई के लिए सामान्य कर सकते हैं, फिर उन दोनों के वेक्टर घटाव को ले सकते हैं और फिर परिमाण का निर्धारण कर सकते हैं। यही कारण है DT। विभाजन एक वक्रता उत्पन्न करता है K0_1। गणना करने के लिए p1, P2 और p3 को पकड़ो K1_2और इसी तरह।

मैं सोच रहा था कि यदि आप समोच्च को पॉलीलाइन के रूप में पकड़ते हैं, तो एक रेंडर किए गए पिक्सेल के रूप में नहीं। आपने 100px कहा ताकि मुझे थोड़ी चिंता हो।


लिंक के लिए धन्यवाद, मुझे इसके पीछे के गणित का अध्ययन करना होगा। मैंने केवल 100px का उल्लेख किया है क्योंकि प्रदान किए गए लेबल पाठ की एक निश्चित चौड़ाई (पिक्सेल में) है, 100px केवल एक उदाहरण था।
इगोर ब्रेजक

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