पॉइंट को-ऑर्डिनेट्स के दिए गए सेट से सीमा-निर्देशांक का पता लगाना?


18

निर्देशांक के एक सेट को देखते हुए, हम सीमा निर्देशांक कैसे पाते हैं।
निर्देशांक का सेट <== चित्रा 1
उपरोक्त सेट में निर्देशांक को देखते हुए, मैं लाल सीमा पर निर्देशांक कैसे प्राप्त कर सकता हूं। बाउंड्री वह बहुभुज है जो इनपुट के लिए वर्टिकल कोऑर्डिनेट करता है, इस तरह से यह क्षेत्र को अधिकतम करता है।

मैं एक ऐसे ऐप पर काम कर रहा हूं, जो किसी शहर के 'x' मील के भीतर प्रॉपर्टीज़ की खोज करता है । मेरे पास क्या है:

  1. सभी संपत्तियों के निर्देशांक।
  2. प्रत्येक शहर के लिए निर्देशांक का एक सेट (मेरे पास प्रत्येक ज़िप के लिए एक समन्वय है। और चूंकि अधिकांश शहरों में एक से अधिक ज़िप हैं, प्रत्येक शहर में निर्देशांक का एक सेट है)

मैं अधिकतम क्षेत्र के लिए कारण पूछ रहा हूं ताकि मैं नीचे दिए गए बहुभुज के साथ न आऊं:

टेढ़ा बहुभुज <== चित्रा 2

सीमा के लिए निर्देशांक के सेट के साथ आने के लिए मुझे क्या चाहिए एल्गोरिदम । एक एल्गोरिथ्म जो मुझे चित्रा 1 के लिए सीमा निर्देशांक के साथ आने की अनुमति देगा ।



4
नहीं, डुप्लिकेट नहीं, यह उत्तल पतवार है, अवतल नहीं
निकल्स अवेन

1
क्या आप विशिष्ट मौजूदा सॉफ़्टवेयर वातावरण में कोड, सैद्धांतिक संदर्भ या समाधान खोज रहे हैं?
वोल्फऑर्ड्रेड

1
@ काजा नहीं, आप क्षेत्र को अधिकतम नहीं करना चाहते हैं, आप सभी उत्तल बहुभुज के बीच इसे कम से कम करना चाहते हैं जिसमें अंक हैं। (क्षेत्र को अधिकतम करने का एकमात्र तरीका पूरी दुनिया को युक्त बहुभुज के रूप में उपयोग करना है।)
व्ह्यूबर

1
@whuber हाँ, अब मैं देख रहा हूं कि आपका क्या मतलब है, मैं न्यूनतम क्षेत्र के साथ उत्तल बहुभुज चाहता हूं। मेरा अंतिम लक्ष्य निकटता की खोज करना है। जिस तरह से हम काम करने के लिए हमारी निकटता खोज चाहते हैं वह यह है: किसी दिए गए शहर (उत्तल पतवार) में, अगर हम "x" मील के भीतर घरों (प्रत्येक घर में एक समन्वय है) की खोज करते हैं, तो यह मुझे उन सभी घरों को देना चाहिए जो या तो अंदर हैं उत्तल पतवार या "x" मील से भी कम के एक ऑर्थोगोनल दूरी पर हैं
खाजा मिन्हाजुद्दीन

जवाबों:


21

इस समस्या को हल करने के लिए कई एल्गोरिदम हैं ( विकिपीडिया "Convex_hull_algorithms" ):

  • उपहार लपेटन उर्फ ​​जार्विस मार्च - ओ (एनएच): सबसे सरल एल्गोरिदम में से एक। इसमें O (nh) समय की जटिलता है, जहां n सेट में अंकों की संख्या है, और h पत में h की संख्या है। सबसे खराब स्थिति में जटिलता O (n2) है।
  • ग्राहम स्कैन - ओ (एन लॉग एन): थोड़ा अधिक परिष्कृत, लेकिन बहुत अधिक कुशल एल्गोरिदम। यदि अंक पहले से ही एक निर्देशांक या कोण द्वारा एक निश्चित वेक्टर में हल किए जाते हैं, तो एल्गोरिथ्म O (n) समय लेता है। [ छद्म कोड ]
  • क्विकहुल: क्विकॉर्ट एल्गोरिथम की तरह, इसमें O (n log n) की अपेक्षित समय जटिलता है, लेकिन सबसे खराब स्थिति में O (nh) = O (n2) के लिए पतित हो सकता है। [ सचित्र वर्णन ]
  • विभाजित और जीतें - O (n log n): यह एल्गोरिथम तीन आयामी मामले पर भी लागू होता है।
  • मोनोटोन श्रृंखला - O (n log n): ग्राहम स्कैन का एक प्रकार जो अपने निर्देशांक द्वारा अंक को क्रमबद्ध करता है। जब इनपुट पहले से ही सॉर्ट हो जाता है, तो एल्गोरिथ्म में O (n) समय लगता है।
  • वृद्धिशील उत्तल पतवार एल्गोरिथ्म - O (n लॉग एन)
  • विवाह-पूर्व-विजय - ओ (एन लॉग एच): इष्टतम आउटपुट-संवेदनशील एल्गोरिथ्म।
  • चैन का एल्गोरिदम - ओ (एन लॉग एच): सरलतम इष्टतम आउटपुट-संवेदनशील एल्गोरिदम।

इन @underdark को सूचीबद्ध करने के लिए धन्यवाद ... कौन सा आपका पिक है?
मारिन



3

आप जो चाहते हैं वह उत्तल पतवार है। PostGIS में एक फ़ंक्शन (वास्तव में GEOS) होता है जो आपको उत्तल पतवार, ST_ConvexHull (ज्यामिति) देता है

विकिपीडिया पर अवतल पतवार के बारे में बहुत सी जानकारी है।


1

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

आप पहले इंटरसेक्टिंग लाइन्स को फेंककर ट्रेसिंग को गति दे पाएंगे। बाहरी सीमा में चौराहे नहीं होंगे।

btw - FME यह भी ConvexHullAccumulator या ConvexHullReplacer ट्रांसफार्मर के साथ करेगा!


1

यदि आप कोड में लागू किसी मौजूदा एल्गोरिदम को देखने में रुचि रखते हैं, तो NetTopologySuite के पास ऐसा करने के लिए एक एल्गोरिथम है

ConvexHull.cs देखें

संयोग से NTS और अन्य पुस्तकालयों के एक समूह को DotSpatial नामक एक शांत परियोजना में लपेटा गया है, यहां पाया जाता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.