मैं एक भौतिकी इंजन/सिम्युलेटर लिख रहा हूं जिसमें 3 डी स्पेस फ्लाइट, ग्रह/तारकीय गुरुत्वाकर्षण, जहाज जोर और सापेक्ष प्रभाव शामिल हैं। अब तक, यह बहुत अच्छी तरह से चल रहा है, हालांकि, एक चीज जिसे मुझे मदद की ज़रूरत है टकराव का पता लगाने एल्गोरिदम का गणित है।तेजी से बढ़ने वाले क्षेत्रों के बीच टकराव का पता लगाने
(नोट::। 3 डी वेक्टर सभी कैप्स हैं) के रूप में
आंदोलन है कि मैं उपयोग कर रहा हूँ की पुनरावृत्ति सिमुलेशन मूल रूप से है
For each obj
obj.ACC = Sum(all acceleration influences)
obj.POS = obj.POS + (obj.VEL * dT) + (obj.ACC * dT^2)/2 (*EQ.2*)
obj.VEL = obj.VEL + (obj.ACC * dT)
Next
कहाँ:
obj.ACC is the acceleration vector of the object
obj.POS is the position or location vector of the object
obj.VEL is the velocity vector of the object
obj.Radius is the radius (scalar) of the object
dT is the time delta or increment
क्या मैं मूल रूप से करने के लिए कुछ कुशल सूत्रों को खोजने के लिए है (EQ.2) ऊपर दो ऑब्जेक्ट्स (obj1, obj2) के लिए और बताएं कि क्या वे कभी टकराते हैं, अगर ऐसा है, तो किस समय। मुझे सटीक समय दोनों की आवश्यकता है ताकि मैं यह निर्धारित कर सकूं कि यह इस विशेष समय वृद्धि में है (क्योंकि एक्सेलरेटन अलग-अलग समय वृद्धि पर अलग होंगे) और यह भी कि मैं सही स्थिति का पता लगा सकूं (जिसे मैं जानता हूं कि कैसे करना है, समय)
इस इंजन के लिए, मैं क्षेत्रों के रूप में सभी वस्तुओं मॉडलिंग कर रहा हूँ, यह सब सूत्र/algortithim क्या कहते हैं पर यह पता लगाने की है करने की जरूरत है:
(obj1.POS - obj2.POS).Distance = (obj1.Radius + obj2.Radius)
जहां .Distance एक सकारात्मक अदिश मूल्य है। (यदि आप आसान हैं, तो दोनों पक्षों को भी चौकोर कर सकते हैं, डिक्शन गणना में निहित स्क्वायर रूट फ़ंक्शन से बचने के लिए)।
(हाँ, मुझे कई अन्य टकराव का पता लगाने के प्रश्नों के बारे में पता है, हालांकि, उनके समाधान सभी अपने इंजन और धारणाओं के लिए बहुत खास प्रतीत होते हैं, और कोई भी मेरी शर्तों से मेल नहीं खाता: 3 डी, गोलाकार, और त्वरण लागू । सिमुलेशन वेतन वृद्धि के भीतर मुझे पता है कि अगर मैं गलत हूँ चलो)
कुछ स्पष्टीकरण:।
1) यह मेरे पहले और बाद में * दो क्षेत्रों के चौराहे * के लिए जाँच करने के लिए पर्याप्त नहीं है समय वृद्धि कई मामलों में उनके वेग और स्थिति में परिवर्तन उनके त्रिज्या से कहीं अधिक हो जाएगा।
2) आरई: दक्षता, मुझे टक्कर के लिए संभावित उम्मीदवारों को निर्धारित करने के संबंध में सहायता (इस बिंदु पर वैसे भी) की आवश्यकता नहीं है, मुझे लगता है कि मैंने इसे कवर किया है।
एक और स्पष्टीकरण है, जो एक बहुत आ रहा किया जा रहा है:
3) मेरा समीकरण (EQ।2) वृद्धिशील आंदोलन के एक द्विघात समीकरण दोनों वेग और त्वरण लागू होने वाला है:
obj.POS = obj.POS + (obj.VEL * dT) + (obj.ACC * dT^2)/2
भौतिकी इंजन है कि मैंने देखा है, (और निश्चित रूप से हर खेल इंजन है कि मैं कभी सुना) केवल रैखिक वृद्धिशील आंदोलन के समीकरणों कि लागू केवल वेग:
obj.POS = obj.POS + (obj.VEL * dT)
यही कारण है कि मैं ढेर पर पाया टक्कर पता लगाने के लिए आमतौर पर प्रकाशित समाधान उपयोग नहीं कर सकते ओवरफ्लो, विकिपीडिया और पूरे वेब पर, जैसे कि दो पंक्ति खंडों के चौराहे/निकटतम दृष्टिकोण को ढूंढना। मेरा सिमुलेशन वैरिएबल त्वरण से संबंधित है जो परिणामों के लिए मौलिक हैं, इसलिए मुझे जो चाहिए वह दो पैराबॉलिक सेगमेंट का चौराहे/निकटतम दृष्टिकोण है।
धन्यवाद tcovo, यह वास्तव में मेरी ज़रूरत पर एक अच्छी शुरुआत है। विकिपीडिया में वेक्टर गुणांक में क्यूबिक समीकरण समाधान का विस्तार करने का कोई विचार है? – RBarryYoung
मैंने लिखा क्यूबिक समीकरण स्केलर गुणांक है: दो वैक्टरों का डॉट उत्पाद एक स्केलर है, और परिमाण का वर्ग भी एक स्केलर है। मैंने उन पर विस्तृत करने के लिए अपनी प्रतिक्रिया संपादित की। – tcovo
आह, बढ़िया! धन्यवाद ... – RBarryYoung