बूस्ट्रोफेडन सेल अपघटन बस एक पर्यावरण को उन क्षेत्रों में विभाजित कर रहा है, जिन्हें कुशलता से एक बस्ट्रोफेडोन पथ द्वारा कवर किया जा सकता है। एक ट्रैपोज़ाइडल अपघटन करेगा, और एक लाइन-स्वीप एल्गोरिथ्म का उपयोग करके पूरा किया जा सकता है। देखें [Choset 2000], यह वेब साइट
, या (मैं अनुशंसा करता हूं!) मार्क डे बर्ग, एट द्वारा उत्कृष्ट पुस्तक "कम्प्यूटेशनल ज्यामिति"। अल, आवश्यक डेटा संरचनाओं और एल्गोरिदम के पूर्ण विवरण के लिए।
चौसेट, होवी। "कवरेज ऑफ़ नोज़ स्पेसेस: द बाउस्ट्रोफेडन सेल्युलर डिकम्पोज़िशन" स्वायत्त रोबोट , 2000।
उदाहरण के लिए, बाधाओं और किनारों के रूप में बाधाओं के सेट पर विचार करें। मान लीजिए कि पर्यावरण एक विशेष बहुभुज से घिरा हुआ है। हमारे पास कुछ इस तरह है। इस स्थान को विघटित करने के लिए, हम बस प्रत्येक शीर्ष और निकटतम रेखा या शीर्ष के बीच लंबवत किनारों को जोड़ते हैं।
कोड में इसे पूरा करने के लिए, आपको केवल एक लाइन-सेगमेंट चौराहा परीक्षण, किनारों की एक क्रमबद्ध सूची, और कोने की क्रमबद्ध सूची की आवश्यकता है।
- बाएं से दाएं क्रम में प्रत्येक शीर्ष से,vi
- एक खड़ी रेखा बनाएं प्रत्येक में , पहले किनारे तक बढ़ा या शिखर यह intersectslivi
- प्रत्येक चौराहे पर, एक नया शिखर बनाएं।
जब यह किया जाता है, नए किनारों और कोने का सेट केवल ट्रेपोज़िड्स को घेरता है। लेकिन मैं जोर देता हूं, आप इसे ऑनलाइन (बाधाओं के पूर्व ज्ञान के बिना) नहीं कर सकते । यदि आप पूर्व ज्ञान के बिना मजबूत कवरेज करना चाहते हैं, तो आप "बग एल्गोरिदम" देख सकते हैं। विशेष रूप से, यहां एक सरल एल्गोरिथ्म है, यह मानते हुए कि पर्यावरण बाध्य है।
प्रारंभ की स्थिति से, ऊपर जाएं और तब तक बाएं रहें जब तक आप पर्यावरण के ऊपरी-बाएं कोने तक नहीं पहुंच जाते। यदि आप पहले एक बाधा का सामना करते हैं, तो आपको इसके चारों ओर यात्रा करनी चाहिए। आपको पता है कि कुछ एक बाधा है, अगर इसे परिचालित किया जा सकता है (टक्कर और चाल)।
ऊपरी बाएँ से, दाईं ओर बढ़ें जब तक आप सीमा का सामना न करें। फिर नीचे जाएं और बाएं (हम पूरे स्थान का एक बस्ट्रोफेडॉन कर रहे हैं)।
जब आप बाईं-दाईं रेखा पर होते हैं और एक बाधा का सामना करते हैं, तो आपके पास दो विकल्प होते हैं। (i) जब तक हम बायीं-दायीं रेखा को ढँकने की कोशिश नहीं करते, तब तक हम जारी रख सकते हैं। (ii) जब तक हम बाधा को पार करने या इस स्थिति को फिर से समाप्त करने के लिए अपना रास्ता नहीं तलाशते, तब तक हम एक नई बाईं-दाईं रेखा को चारों ओर घुमा सकते हैं। मैं बताता हूँ।
बाईं ओर, हम बाधा के चारों ओर चलते हैं जब तक कि हम उस "लाइन" पर वापस नहीं आ सकते, जिसका हम अनुसरण करने की कोशिश कर रहे थे। दाईं ओर, हम बाधा के एक तरफ (छोटे) क्षेत्र को कवर करना जारी रखते हैं।
पहली विधि का लाभ यह है कि आप हमेशा बाधा को पूरी तरह से बाहर निकालते हैं, इससे पहले कि आप इसके बारे में निर्णय लें कि इस प्रकार आप इसके बारे में निर्णय कैसे ले सकते हैं। दूसरी विधि का लाभ यह है कि आपको बाधा के चारों ओर जाने की ज़रूरत नहीं है, आप बस उस क्षेत्र को कवर करने के लिए आगे बढ़ सकते हैं जिस क्षेत्र में आप हैं।
ध्यान दें कि यह आपके बैस्ट्रोफेडोन अपघटन को ऑनलाइन तरीके से परिभाषित करता है : आप बाधाओं के बीच या बाधाओं और सीमा के बीच के क्षेत्र को कवर करते हैं।
हालांकि, जहां तक मुझे पता है, पहला तरीका विश्लेषण करना आसान है। अधिक जटिल एल्गोरिदम (जैसे बीएफएस, इत्यादि) को या तो इसलिए चुना जाता है क्योंकि पर्यावरण अबाधित है (आप एक सीमा की तलाश में हमेशा के लिए खर्च नहीं करना चाहते हैं), या इस तरह से वास्तव में बुरा बाधा है कि मूल रूप से पर्यावरण का विभाजन होता है। यह बुरा क्यों है? इस उदाहरण को देखें:
चलती बाएँ सही, तो प्रत्येक बाधा चक्कर पैदा करता है जिस तरह से प्रत्येक बाधा के बीच छोटे भागों के भी कई कवर। वास्तव में, वैश्विक पथ योजना के बिना, आप इसे अपने ग्रिड के रिज़ॉल्यूशन के रूप में खराब कर सकते हैं, इन स्तंभों को 1 px चौड़ा, पूरे वातावरण और 1 px को अलग करके। फिर आपको हर बार इसे हिट करने पर बाधा के चारों ओर घूमना होगा।
यही कारण है कि मैंने पूछा कि क्या आपको कुछ पता है कि आप पर्यावरण में कहां हैं या वैश्विक पथ योजना बना सकते हैं। लेकिन ऑनलाइन बनाम ऑफ़लाइन चर्चा और इसके लिए इष्टतम एल्गोरिदम वह नहीं है जो आप वास्तव में चाहते थे।
अपडेट: मुझे छवियों को हटाना था (https नहीं), और इसे पोस्ट करूंगा जो अक्सर व्यावहारिक वास्तविक दुनिया अनुप्रयोगों में उपयोग किया जाता है। http://www.cs.cmu.edu/~motionplanning/papers/sbp_papers/integrated1/yamauchi_frontiers.pdf