किसी वस्तु को अपने लक्ष्य तक ले जाने के लिए दुश्मन की स्थिति की भविष्यवाणी करना


13

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

गणित, एल्गोरिदम, आदि का वर्णन करने वाले लेखों की कोई भी लिंक की सराहना की जाएगी!



लिंक के लिए धन्यवाद! हालाँकि, मुझे लगता है कि समाधान पढ़ना थोड़ा कठिन है, हो सकता है कि मैं आपके द्वारा दिए गए लिंक का उपयोग करके इस प्रश्न का स्पष्ट दृश्य उत्तर दे सकता हूं, किसी भी अन्य को उसी समस्या से बचाने में मदद करने के लिए।
लारोलो

@ लॉरारो मैंने अपने जवाब में एक ग्राफिकल प्रदर्शन जोड़ा है ताकि आप इसे थोड़ा बेहतर समझ सकें।
jmacedo

जवाबों:


5

GameDev पर यह प्रश्न , और StackOverflow पर यह प्रश्न आपको वह उत्तर प्रदान करना चाहिए जिसकी आप तलाश कर रहे हैं। :)


1
धन्यवाद :) मैं एक समाधान दूसरी कड़ी से कोड का उपयोग कर को लागू करने में सक्षम था
Kryptic

3

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

मैंने इसे गणितज्ञ में लिखा है जो आपकी समस्या से मेल खाता है। मूल रूप से यह OA चर के क्रम में समीकरणों / असमानताओं को हल करता है जो कि हमें पता लगाने की आवश्यकता है। आउटपुट हमें वह संभावित समाधान देने वाला है जो OA के पास हो सकता है और ऐसी परिस्थितियाँ जो वैध होने के लिए प्रत्येक समाधान के लिए सत्यापित होनी चाहिए:

Reduce[{BPx, BPy} + t*{BVx, BVy} == {OPx, OPy} + t*OV*{Cos[OA], Sin[OA]} && t != 0 && OV != 0, {OA}]
  • {BPx, BPy} नीले रंग की वर्तमान स्थिति है

  • {बीवीएक्स, बीवी} नीले रंग का वेग वेक्टर है

  • {OPx, OPy} नारंगी की बुलेट स्थिति है

  • OV नारंगी की बुलेट वेग वेक्टर (कुल गति) का मानदंड है

  • OA नारंगी का बुलेट कोण (वेग वेक्टर का कोण) है

  • t नीले रंग की गोली के लिए आवश्यक समय है

मैंने परिस्थितियों में t> 0 && OV> 0 डालने की कोशिश की, लेकिन गणित हमेशा के लिए ले जाएगा इसलिए मैंने अभी t! = 0 && OV! = 0. का उपयोग किया है, इसलिए मैं जो समाधान यहां देने जा रहा हूं, वह तब काम करेगा जब नीला बिल्कुल सटीक न हो! नारंगी के समान स्थिति और जब नारंगी की गोली वास्तव में चलती है (अभी भी रहने के बजाय)

आउटपुट विशाल है: http://freetexthost.com/xzhhpr5e2w

हालांकि अगर हम OA == _ भागों को निकालते हैं, तो हमें यह मिलता है:

http://freetexthost.com/iyrhqoymfo

वे मान हैं जो OA हो सकते हैं (प्रत्येक को मान्य होने के लिए विभिन्न स्थितियों की आवश्यकता होती है)।

कुछ और विश्लेषणों के साथ उन समाधानों को निकालते हैं जिनकी आवश्यकता ओवी को नकारात्मक होती है जो हम नहीं चाहते, मुझे यह मिला:

http://freetexthost.com/iy4wxepeb6

तो ये समस्या के संभावित समाधान हैं, प्रत्येक को अलग-अलग शर्तों को मान्य करने की आवश्यकता होती है। एक निश्चित कोण OA के लिए एक वैध समाधान होने के लिए, निम्नलिखित शर्तों को पूरा करना होगा:

Reduce[{BPx, BPy} + t*{BVx, BVy} == {OPx, OPy} + t*OV*{Cos[OA], Sin[OA]} && t != 0 && OV != 0, {t}]

आउटपुट:

(BVy - OV Sin[OA] != 0 && BPx == (BPy BVx + BVy OPx - BVx OPy - BPy OV Cos[OA] + OPy OV Cos[OA] - OPx OV Sin[OA])/(BVy - OV Sin[OA]) && t == (-BPy + OPy)/(BVy - OV Sin[OA]) &&  BPy OV - OPy OV != 0) || 
(BVy == OV Sin[OA] && BPy == OPy && BVx - OV Cos[OA] != 0 && t == (-BPx + OPx)/(BVx - OV Cos[OA]) && BPx OV - OPx OV != 0) || 
(BVy == OV Sin[OA] && BVx == OV Cos[OA] && BPy == OPy && BPx == OPx && OV t != 0)

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

इसके बारे में /math// में पूछना भी एक अच्छा विचार हो सकता है ।

संपादित करें

मैंने इस प्रश्न के लिए कुछ रुचि पैदा की है, इसलिए मैंने जो कुछ भी समझाया, उसके चित्रमय प्रदर्शन के साथ एक टिप्पणी नोटबुक बनाई है। यहाँ से डाउनलोड करें:

http://www.2sared.com/file/pXhYyhN1/towerBullets.html
या यहाँ: http://www.2sared.com/file/W01g4sST/towerBullets.html

(यह प्रकाशित संस्करण है, और इसे देखने के लिए आपको केवल गणितज्ञ खिलाड़ी की आवश्यकता है-जो निःशुल्क है- यदि आपके पास गणित नहीं है तो यह जाने का तरीका है)

स्क्रीनशॉट:


मैं गुणन चिह्न (*) के साथ स्थितियां और समाधान प्रदान कर सकता हूं, इसलिए आपके लिए उन्हें अपनी प्रोग्रामिंग भाषा में पोर्ट करना आसान है (तब आपको केवल आर्कन […], सिन […] को बदलना होगा। Cos [...], Sqrt [...] और अंततः शक्ति चिन्ह (^)।
jmacedo

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