अधिकतम के साथ एक लक्ष्य के लिए एक बुलेट पथ की गणना के लिए एल्गोरिदम। 2 रिकोषेट


21

खराब शीर्षक के लिए क्षमा करें, लेकिन मेरे पास इसे वाक्यांश देने का बेहतर तरीका नहीं है ...

इसलिए Wii (Wii) पर WiiPlay नामक यह अद्भुत खेल है । इसमें 9 मिनीगेम्स हैं, और मेरे पसंदीदा को टैंक कहा जाता है ! । यह खुद को नष्ट किए बिना COM दुश्मन के टैंक को नष्ट करने के बारे में है। यहाँ एक स्तर का स्क्रीनशॉट है:

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

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

एक शौकिया प्रोग्रामर के रूप में मैं खुद सोच रहा हूं कि चूने की टंकी यह निर्धारित कर सकती है कि खिलाड़ी टैंक को किस दिशा में फायर करना चाहिए।

मैंने खुद इसके बारे में सोचा लेकिन किसी भी संभव एल्गोरिथ्म के साथ नहीं आया। यदि वे किसी को प्रेरित करते हैं तो मैं अपने निष्कर्ष की व्याख्या करूँगा। बस मेरे स्पष्टीकरण के दौरान सादगी के लिए, मैं एक दीवार को किसी भी सतह के खिलाफ मानता हूं, जिसके खिलाफ एक गोली रिकोषेट कर सकती है । ब्लॉकों की एक पृथक आयत इस प्रकार चार दीवारें बनाती हैं।

मैंने निष्कर्ष निकाला कि 2 बिंदु जिस पर बुलेट रिकोशे हमेशा एक समानांतर चतुर्भुज के एक तरफ झूठ बोलते हैं या एक समानांतर चतुर्भुज के विपरीत कोने बन जाते हैं। फायरिंग दुश्मन के टैंक और खिलाड़ी के टैंक का लक्ष्य यह आवश्यक नहीं है कि अन्य 2 कोने हों, लेकिन निश्चित रूप से समानांतर चतुर्भुज के चारों ओर कॉलिनियर की तर्ज पर झूठ बोलते हैं। यहां उन 4 संभावित तरीकों का चित्रण किया गया है, जो समांतर चतुर्भुज का निर्माण कर सकते हैं:

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

HOR-VER का मतलब है कि बुलेट पहले एक क्षैतिज दीवार से टकराती है, फिर यह एक ऊर्ध्वाधर दीवार से टकराती है।

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

इसके अलावा, मैं एल्गोरिथ्म के सामान्य प्रवाह के बारे में निश्चित नहीं हूं। क्या एल्गोरिथ्म निम्नलिखित 2 संरचनाओं में से किसी को भी लेता है, या शायद मैं इन दोनों के साथ गलत हूं?

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

मेरी राय में, इस एल्गोरिथम का पता लगाना कठिन है क्योंकि:

  • किसी भी दिशा में गोली चलाई जा सकती है; तथा
  • किसी भी दीवार पर अनंत रूप से कई बिंदु होते हैं, जैसे कि गणित में, जहां एक रेखा पर अनंत रूप से कई बिंदु होते हैं।

लेकिन निनटेंडो लोगों ने इसे वैसे भी बनाया है, ... किसी को भी एक विचार के साथ?


बस जांच करने के लिए, आप पूछ रहे हैं कि यह कैसे किया जा सकता है, न कि कैसे निनटेंडो वास्तव में इसे करने के लिए चुना, है ना?
Ixrec

@lxrec आप सही हैं, बस इसे करने के लिए एक संभावित तरीके में रुचि रखते हैं, न कि जिस तरह से उन्होंने ऐसा किया
सभी

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

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

@ मैनड्रिल मुझे डर है कि आपको मेरा सवाल समझ में नहीं आया। मैं पूछ रहा था कि दुश्मन टैंक एक बुलेट पथ कैसे तैयार कर सकता है जो खिलाड़ी टैंक को हिट करता है।
सभी

जवाबों:


9

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

target |obstacle
   X   |
    \  |  X real position
     \   /
      \ /
   ----------- mirror surface
        \
         \
          X virtual position

लाभ यह है कि अब मिरर की किरण आभासी स्थिति से निकलने वाली एक सीधी रेखा है। मैंने निम्नलिखित स्केच में तकनीक को चित्रित करने का प्रयास किया:

कोनों के आसपास शूटिंग

X गोलीबारी की स्थिति को चिह्नित करता है, (X) लक्ष्य। रंगीन क्षेत्र दिखाई दे रहे हैं।

  1. दृष्टि की सीधी रेखा: लक्ष्य दिखाई नहीं देता है। हालांकि, हम सतहों (1) और (2) से टकरा सकते हैं।

  2. एक प्रतिबिंब। बाधाओं के भीतर दो आभासी फायरिंग पोजिशन हैं। निचली स्थिति में लक्ष्य के लिए प्रत्यक्ष LOS है, इसलिए हमारे पास हमारा पहला फायरिंग समाधान है: बुलेट पथ लक्ष्य और निचली दर्पण सतह के बीच किरण का हिस्सा है, और किरण दर्पण टकराव बिंदु और वास्तविक फायरिंग स्थिति के बीच है।

  3. दो प्रतिबिंब: पहले प्रतिबिंब से ऊपरी आभासी स्थिति इसकी दर्पण सतह के माध्यम से निचली बाधा का हिस्सा देख सकती है। चूंकि दो प्रतिबिंबों की अनुमति है, इसलिए हम इस स्थिति को कम बाधा में दर्पण कर सकते हैं। पदों को (I) वास्तविक स्थिति के रूप में चिह्नित किया जाता है, (II) पहले प्रतिबिंब से आभासी स्थिति, और (III) दूसरे प्रतिबिंब से आभासी स्थिति।

    (III) से, हमारे पास LOS को लक्ष्य (X) से सीधा करना है, इसलिए हमने एक और फायरिंग समाधान ढूंढ लिया है। गोली का रास्ता लाइन X-III के साथ है जब तक कि दूसरा दर्पण टकराव बिंदु तक नहीं है, फिर दर्पण टकराव बिंदुओं के बीच लाइन III-II के साथ, और अंत में लाइन II के साथ-प्रथम दर्पण टक्कर बिंदु से वास्तविक स्थिति I तक।

    दरअसल, पहले प्रतिबिंब से निचली आभासी स्थिति भी ऊपरी बाधा में परिलक्षित हो सकती है, लेकिन इससे कोई प्रत्यक्ष समाधान नहीं होगा।

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


मुझे समझ में नहीं आया कि "किरणों को केवल बाधाओं के किनारों पर कैसे लॉन्च किया जाए"। क्या आप दीवारों के अंत की ओर किरणों को शुरू करना शुरू करते हैं, और धीरे-धीरे अंदर की ओर तब तक बढ़ते हैं जब तक हमें कोई हल नहीं मिल जाता? यदि हां, तो मैं समझता हूं कि इस नियम से समाधान तेजी से मिल सकता है।
सभी

कुछ विचार करने के बाद, मुझे लगता है कि यह सबसे अच्छा जवाब है क्योंकि जाहिर है, गणितीय उत्तर के साथ मैंने पहले सर्वश्रेष्ठ के रूप में चिह्नित किया है, सीधे एक उछाल और उछाल-मुक्त समाधान से निपट नहीं सकता है।
सभी

ये जबरदस्त है! अपने खेल पर बहुत अधिक मांग किए बिना अपने स्तर का एक प्रतिबिंबित प्रतिनिधित्व कैसे बनाएं?
रेट्रोविलेस

7

2 दीवारों परावर्तन के लिए कार्ल बेलेफ़ेल्ट विचार का विस्तारयहाँ छवि विवरण दर्ज करें

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

1) यदि A के पास R की प्रत्यक्ष दृष्टि है

2) अगर R का संबंध वाल 1 से है (दीवार सिर्फ एक खंड है, पूरी रेखा नहीं है)

3) यदि R की S तक सीधी पहुँच है

4) यदि S का संबंध वाल 2 से है (दीवार सिर्फ एक खंड है, पूरी रेखा नहीं है)

5) यदि S की B तक सीधी पहुँच है।

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

(AA')/(RA')=(SS')/(RS')

अन्य समीकरण है:

(BB')/(SB')=(RR')/(SR')

ध्यान दें कि उपरोक्त समीकरणों में A, A, B, B 'को जाना जाता है या सीधे गणना की जा सकती है। R 'और S' R और S के निर्देशांक और दीवार समीकरणों के कार्य हैं। मैंने गणित पूरा नहीं किया इसलिए मुझे नहीं पता कि समीकरण कैसे दिखेंगे।


यह एक महान गणितीय दृष्टिकोण है। लेकिन एल्गोरिथ्म को एक साथ समीकरणों को हल करने के लिए बहुत अधिक गणना समय की आवश्यकता होती है, मुझे लगता है? बहुत सारे वर्गमूल हैं और दूरी के साथ घातांक शामिल हैं।
सभी

3

आप इस तथ्य का लाभ उठा सकते हैं कि रिकोशे को छोड़ने वाला कोण उसी तरह होना चाहिए जैसा कि इसे दर्ज करने वाला कोण है। साथ दिए गए क्षैतिज दीवार के लिए y- निर्देशांक cऔर दो निर्देशांक के साथ तय हो गई टैंकों (a,b)और (d,e), केवल एक कोण जो संतुष्ट नीचे समीकरण है।

समीकरण का आरेख

बस xउस दीवार के साथ दूरी पाने के लिए हल करें जिस पर आपको लक्ष्य बनाना चाहिए। दो दीवारें समान काम करती हैं। आपके पास बस दो समीकरण और दो अज्ञात हैं।


1

आपके पास साफ-सुथरे आरेख हैं जो दिखाते हैं कि किरणों को कैसे निर्देशित किया जाए, इसलिए मैं विवरणों को प्रतिबिंबित सतहों की एक जोड़ी का निर्धारण करने के तरीके पर छोड़ दूंगा।

चलिए उस सतह को कहते हैं जिसे पहली सतह A , और दूसरी B को मारा जाना चाहिए ।

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

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

यदि लक्ष्य धार किरणों के बीच नहीं है, तो आप स्पष्ट रूप से इसे किसी मध्यवर्ती किरण से नहीं मार सकते; सतहों की एक और जोड़ी चुनें।

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

यहाँ एक तस्वीर है:

किरणों

यहाँ दो एज किरणों को लाल और नीले रंग में दिखाया गया है। जाहिरा तौर पर आप लाल की तुलना में छोटे कोण पर उत्सर्जित एक किरण पा सकते हैं, लेकिन अधिक से अधिक लाल एक है ताकि किरण हरे रंग के लक्ष्य से टकरा जाए।


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

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

-3

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


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