जवाबों:
सबसे सरल तरीका ईयूल एकीकरण है। आपको स्थिति वेक्टर और वेग वेक्टर संग्रहीत करना होगा। प्रत्येक फ्रेम में:
( एक्स स्कार्स के लिए एक्स , वैक्टर के लिए एक्स )
यकीन है कि डीटी छोटा है ...
| जी | पृथ्वी के लिए लगभग 9.8 m / s² और चंद्रमा के लिए लगभग 1.6 m / s moon है
सामान्य तौर पर गुरुत्वाकर्षण बल के कारण सक्रियता बल है:
यह प्रत्येक शरीर को प्रभावित करता है और यह दूसरे की ओर इशारा करता है।
जी अदिश बहुत प्रसिद्ध है गुरुत्वाकर्षण स्थिरांक इसके बारे में 6.67e-011 N (एम / किलोग्राम) है ²
चूंकि आप त्वरण में रुचि रखते हैं:
आपको केवल अपने त्वरण की गणना करने के लिए ग्रह के द्रव्यमान (एम 2) और त्रिज्या (आर) को जानना होगा।
आमतौर पर त्वरण जो ग्रह को आपके अंतरिक्ष यान की ओर ले जाता है, वह नगण्य है क्योंकि आमतौर पर एम 1 एम 2 की तुलना में नगण्य है।
हालाँकि, यदि आप एक छोटे क्षुद्रग्रह के लिए उतरने की कोशिश कर रहे हैं, तो संभवतः आपको दूसरे चरण में उस बल को कुल बल वेक्टर में जोड़कर सामान्य सूत्र का उपयोग करना होगा।
संपादित करें:
जैसा कि कार्यान्वयन पर कुछ संकेत चाहिए। आपको चाहिये होगा:
सबसे पहले वेक्टर लाइब्रेरी: आपका गेम मोनो / बाय / ट्री / फोर ... डायमेंशनल हो सकता है, जहां तक आप अपने मामले को 3 डी शब्द, फिजिकल रूल्स होल्ड का प्रोजेक्शन मानते हैं।
यदि n आपके द्वारा चुने गए आयाम (शायद आपके मामले में 2 या 3) है, तो पुस्तकालय में होना चाहिए:
आप एक पुस्तकालय का उपयोग कर सकते हैं जो ऐसा करता है या अपने आप से एक को लागू करता है; एक वेक्टर एक संरचना या एक वर्ग हो सकता है, चुनाव आपका है।
प्रत्येक इंजन द्वारा वर्णित किया जाना चाहिए:
आपके उपयोगकर्ता इनपुट का उपयोग प्रत्येक इंजन को एक नंबर प्रदान करने के लिए किया जाएगा जो 0 (अप्रयुक्त इंजन) और 1 (पूर्ण शक्ति) के बीच होगा: इंजन (उपयोग) कारक।
इंजन के वास्तविक विश्वास को प्राप्त करने और सभी उपलब्ध इंजनों के सभी परिणामों को प्राप्त करने के लिए अपने जोर वेक्टर के लिए इंजन कारक को गुणा करें; यह आपको दूसरे चरण का F देगा ।
आपके इंजन कारक का उपयोग प्रत्येक इंजन के लिए वास्तविक ईंधन उपयोग को जानने के लिए किया जा सकता है: ईंधन के उपयोग से इंजन का गुणन और dt द्वारा तात्कालिक ईंधन उपयोग को जानने के लिए; आप इस मूल्य को कुल ईंधन क्षमता चर से हटा सकते हैं (यह आपको ईंधन द्रव्यमान के काफी होने पर अपने कुल द्रव्यमान m को अद्यतन करने का अवसर देता है)।
अब आप नई स्थिति की गणना करने के लिए एकीकरण का उपयोग करके आगे बढ़ सकते हैं, अपने ग्रह की सतह के साथ टकराव की जांच कर सकते हैं; यदि कोई हो, तो लैंडिंग वेक्टर की लंबाई का उपयोग यह कहने के लिए करें कि क्या लैंडिंग एक सफलता या आपदा थी।
जाहिर है कि अन्य टकराव की जांच की जा सकती है / होनी चाहिए, कुछ सतह संस्थाओं को लैंडिंग बिंदु के रूप में अनुमति नहीं दी जा सकती है, इसलिए हर टक्कर एक घातक है।
मैं इनपुट प्राप्त करने के तरीके को छोड़ता हूं और आपको अपना स्पेसशिप कैसे प्रदान करता हूं; आप उदाहरण के लिए, इंजन स्थिति फ्रेम द्वारा रेंडर करने के लिए इंजन कारक का उपयोग कर सकते हैं।
जैसा कि अन्य उत्कृष्ट जवाब थोड़ा सैद्धांतिक लगता है, यहाँ सरल कोड संस्करण है:
// Position of the lander:
var positionX = 100.0;
var positionY = 100.0;
// Velocity of lander
var velocityX = 0.0;
var velocityY = 0.0;
// Acceleration due to gravity
var gravity = 1.0;
// If the player is pressing the thrust buttons
var isThrusting = false;
var isThrustingLeft = false;
var isThrustingRight = false;
// Thrust acceleration
var thrust = -2.0;
// Vertical position of the ground
var groundY = 200.0;
// Maximum landing velocity
var maxLandingVelocity = 3.00;
onUpdate()
{
velocityY += gravity;
positionX += velocityX;
positionY += velocityY;
if (isThrusting)
{
velocityY += thrust;
}
if (isThrustingLeft)
{
velocityX += thrust;
}
else if (isThrustingRight)
{
velocityX -= thrust;
}
if (positionY >= floorY)
{
if (velocityY > maxLandingVelocity)
{
// crashed!
}
else
{
// landed successfully!
}
}
}
दुर्भाग्य से, यहाँ गणित बालों वाला हो जाता है। FxIII का उत्तर गिरने वाली वस्तु के सामान्य मामले के लिए ठीक है लेकिन आप एक रॉकेट के बारे में बात कर रहे हैं - और रॉकेट ईंधन से जलते हैं।
मैंने ऐसा कोड देखा है जो ऐसा करता है लेकिन यह पूरी तरह से अनिर्दिष्ट था और मैं इसके पीछे के गणित का पता लगाने में कभी कामयाब नहीं रहा। जब तक आप सीपीयू-सीमित नहीं होते हैं, मैं किसी भी तरह से परेशान नहीं होता और बस इसे बल देता हूं - FxIIIs दृष्टिकोण काफी कम समय पर लागू होता है और जोर को समायोजित करता है (या ईंधन का उपयोग अगर आप रॉकेट थ्रॉटल को वापस लेते हैं क्योंकि ईंधन बनाए रखने के लिए बंद हो जाता है। प्रत्येक पुनरावृत्ति के बीच निर्दिष्ट त्वरण के बजाय निर्दिष्ट त्वरण) क्योंकि रॉकेट ईंधन से जलता है।