2013-01-14 14 views
7

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

enter image description here

Btw, वहाँ वस्तु कलाकारों के मामले में इस तरह बात काम करने के लिए एक तरीका है, यह के रूप में/लगभग तेजी के रूप में सरल रे कलाकारों के साथ हो जाएगा?

enter image description here

वहाँ कुछ vay रास्ते में इष्टतम खोजने के लिए एक तरीका है?

enter image description here

+0

क्या यह एक वस्तु से बचने या मनमाने ढंग से वस्तुओं की संख्या है?क्या यह एक प्लानर या 3-आयामी अंतरिक्ष में है? बाधाएं चलती हैं जबकि ए रास्ते में है? –

+0

बचने की पसंद के सफलता का क्या उपाय है? – argentage

+0

क्या यह एक वस्तु से बचने या मनमाने ढंग से वस्तुओं की संख्या है? हाँ - वस्तुओं के 10 के, 3-आयामी अंतरिक्ष, ए रास्ते में होने पर बाधाएं बढ़ती हैं? नहीं। – myWallJSON

उत्तर

2

कैसे साथ ....

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

यह थोड़ा और जटिल है क्योंकि आप जिस आकार को ले जा रहे हैं वह सिर्फ एक बिंदु नहीं है। आप अंधेरे से अपने केंद्र को नहीं ले जा सकते हैं या यह टकरा जाएगा। यह अभी भी अधिक जटिल हो जाता है क्योंकि यह एक कशेरुक के पीछे चलता है, क्योंकि आपको बाधा के कशेरुक के खिलाफ अपने ऑब्जेक्ट के किनारे को चरा देना पड़ता है।

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

+0

मेरे पास 10k ऑब्जेक्ट्स और बहुत कुछ है .. सभी चल रहे हैं ... और सभी को टक्कर नहीं लेनी चाहिए और गति रखना चाहिए ... ( – myWallJSON

3

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

प्रारंभ में, रस्सी एक बहुत ही खराब मार्ग होगा। अनुकूलित करने के लिए, ऊर्जा ढाल के साथ बिंदुओं को ले जाएं। आपके मामले में ऊर्जा कार्य बहुत आसान है, यानी रस्सी की कुल लंबाई।

यह एक नया विचार नहीं है लेकिन वस्तुओं की सीमाओं का पता लगाने के लिए कंप्यूटर दृष्टि में उपयोग किया जाता है, हालांकि ऊर्जा कार्य अधिक जटिल होते हैं। फिर भी, आपको एक विचार देने के लिए "सांप" देखें कि प्रत्येक बिंदु को अपने दोनों पड़ोसियों को कैसे स्थानांतरित किया जाए:)

हालांकि, आपके मामले में, बस अपने पड़ोसियों द्वारा लगाए गए बल से प्रत्येक बिंदु के लिए दिशा प्राप्त करना ठीक हो जाओ

आपकी समस्या एक बाधित समस्या है जहां आप टकराव पर विचार करते हैं। मैं वास्तव में एक उत्तल हल, या यहां तक ​​कि प्रत्येक वस्तु के लिए एक क्षेत्र का उपयोग करने के लिए @ धान के विचार के साथ जाऊंगा। उत्तरार्द्ध मामले में, एक जगह है जहाँ बी को इसकी दूरी एक की त्रिज्या के साथ साथ बी की त्रिज्या के साथ साथ एक फ़ज कारक पर विचार है कि आप एक अनंत की जरूरत नहीं है की तुलना में कम है में एक बिंदु को स्थानांतरित नहीं है बिंदुओं की संख्या।

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

+0

क्या रस्सी/सांप तेजी से हैं? (10 000 ऑब्जेक्ट्स (सरल बक्से और पायरोमिड) कोर पर यादृच्छिक दिशाओं में चलते हैं i7) – myWallJSON

+0

यदि आप एक दूसरे वस्तु को बाधा के रूप में देखते हुए 10,000 वस्तुओं के मार्ग की योजना बना रहे हैं, तो मुझे डर है कि यह दृष्टिकोण आपके लिए अच्छा काम नहीं कर सकता है। –

10

आप जो पूछ रहे हैं वह वास्तव में एक पथदर्शी प्रश्न है; अधिक विशेष रूप से, यह "किसी भी कोण पथदर्शी समस्या" है।

यदि आप ग्रिड में बाधाओं के किनारों को सीमित कर सकते हैं, तो एक लोकप्रिय समाधान केवल उस ग्रिड पर ए * का उपयोग करना है, फिर पथ-चिकनाई लागू करें। हालांकि, (बल्कि हालिया) एल्गोरिदम है जो कार्यान्वित/समझने के लिए आसान है और पथ-चिकनाई से बेहतर परिणाम देता है। इसे Theta* कहा जाता है।

Theta* vs. path smoothing

वहाँ एक अच्छा लेख समझा थीटा * (जिसमें से मैं ऊपर छवि चुरा लिया) here


आप एक ग्रिड के लिए अपने बाधाओं नहीं सीमित कर सकते हैं, तो है, तो आप '

Navigation mesh

: अपने नक्शे के लिए navigation mesh उत्पन्न करने के लिए होगा

जटिलता के विभिन्न तरीकों से ऐसा करने के कई तरीके हैं; उदाहरण के लिए देखें here, here, या here। एक त्वरित Google खोज भी आपके लिए ऐसा करने के लिए उपलब्ध पुस्तकालयों को बदलती है, जैसे कि this one या this one

0

मैं इस छवि छवि में बी वस्तुओं इंगित करने के लिए वस्तु तक पहुँचने के लिए मेरा विचार बताने के लिए बना दिया है: - गहरे नीले रंग की बिंदी वस्तु का प्रतिनिधित्व करता है। लाल रेखाएं बाधाएं हैं। ग्रे डॉट और लाइन वह क्षेत्र है जहां पहुंचा जा सकता है। बैंगनी तीर बिंदु बी की दिशा है। वस्तु की भूरे रंग की रेखा दृश्यता का क्षेत्र है। छवि को समझना: - ऑब्जेक्ट में दृश्यता का एक निश्चित क्षेत्र होगा। यह एक 2 डी स्थिति है इसलिए मैंने दृश्यता का क्षेत्र 180 डिग्री होने का अनुमान लगाया है। (दृश्यता के मानव क्षेत्र के लिए http://en.wikipedia.org/wiki/Human_eye#Field_of_view देखें) वस्तु सोनार के विचार का उपयोग करके दूरी को मापती है। सोनार की मदद से वस्तु उस क्षेत्र को ढूंढ सकती है जहां वह पहुंच सकता है। बैकट्रैकिंग का उपयोग करके, ऑब्जेक्ट ऑब्जेक्ट के रास्ते को ढूंढ सकता है। यदि जाने का कोई रास्ता नहीं है, तो ऑब्जेक्ट को दृश्यता के क्षेत्र को बदलना चाहिए

0

इसे देखने का एक तरीका छाया कास्टिंग समस्या के रूप में है। A "प्रकाश स्रोत" बनाएं और फिर तय करें कि दृश्य में प्रत्येक बिंदु छाया के अंदर या बाहर है या नहीं। जो छाया में नहीं हैं A से किरणों द्वारा पहुंचा जा सकता है। अन्य क्षेत्र नहीं हैं। यदि आपको B छाया में है, तो आपको केवल उस दृश्य में निकटतम बिंदु का पता लगाना चाहिए जो प्रकाश में है।

यदि आप इस समस्या को "पिक्सल" में विघटित करते हैं, तो उपर्युक्त दृष्टिकोण छाया प्रतिपादन पर विशाल कंप्यूटर ग्राफिक्स साहित्य में बहुत प्रसिद्ध समाधान है। उदाहरण के लिए, आप एक बूलियन ध्वज के साथ प्रत्येक पिक्सेल को पेंट करने के लिए Shadow Map का उपयोग कर सकते हैं जो इंगित करता है कि यह छाया में है या नहीं। निकटतम लिट पिक्सेल ढूंढना B के आसपास बढ़ती सांद्रिक मंडलियों की एक साधारण खोज है। जीपीयू हार्डवेयर का शोषण करके इन दोनों परिचालनों को बेहद तेज़ बनाया जा सकता है।

एक अन्य नोट: आप किसी सामान्य ऑब्जेक्ट पथ को समस्या पथ समस्या के रूप में ढूंढने का इलाज कर सकते हैं। रहस्य मिंकोस्की मतभेदों का उपयोग करके उचित मात्रा में बाधाओं को "बढ़ाना" है। उदाहरण के लिए देखें this work on robot path planning

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