के साथ आंदोलन बलों की गणना करें मैं एक छोटा अंतरिक्ष शूटर गेम बना रहा हूं। अंतरिक्ष भौतिकी में आने पर मैंने गणित की समस्या पर कभी भी स्टब किया है।वेक्टर, अधिकतम गति
शब्दों के साथ इसका वर्णन निम्न है: अधिकतम गति है। तो यदि आप पूर्ण पूर्ण गति देते हैं तो आप पुराने एस्टरॉयड गेम की तरह स्क्रीन पर बार-बार स्क्रीन पर आगे बढ़ेंगे। यदि रॉकेट बूस्ट जारी करते हैं तो आपको स्क्रीन पर उस गति के साथ आगे बढ़ना चाहिए।
फिर मुश्किल हिस्सा जहां मैं अभी अटक गया।
यदि आप किसी भी कोण को घुमाते हैं और फिर से बढ़ावा देते हैं तो जहाज को इस दिशा तक पहुंचने की कोशिश करनी चाहिए और जब यह कितनी तेज़ी से चल रहा है, तो अधिकतम गति को कभी भी तेज नहीं किया जाना चाहिए। तो मेरा सवाल है। इस मुद्दे के लिए किसी के पास एक अच्छा विचार सूत्र है? ऐसा लगता है कि अगर आप जानते हैं कि क्या देखना है तो इससे पहले किया गया है। :)
बीमार कुछ छोटी वेक्टर गणनाओं के साथ किए जाने की कोशिश करने के लिए इस छोटी छवि को जोड़ें।
लाल अंगूठी: अधिकतम गति
ग्रीन लाइन: वर्तमान जहाज दिशा।
ब्लैक लाइन: दिशा (ओं) और एक्स और वाई में जहाज कितनी तेज़ी से आगे बढ़ रहा है।
काला अंगूठी: आंदोलन की उत्पत्ति।
इसे समझा सकता है लेकिन इसके लिए एक अच्छा गणित समाधान ढूंढना मुश्किल है। :)
संपादित
इस कोड को हर फ्रेम में अभी उपयोग कर इम है। यह जहाज को आंदोलन देता है लेकिन जहाज को रोकने या धीमा करने के लिए उपयोगकर्ता को अपने रॉकेट बूस्टर के साथ प्रतिबिंबित करने के लिए आंदोलन की शक्ति नहीं देती है। इसके साथ ही यह तुरंत बंद हो जाता है कि आप जहाज के लिए तेज गति को छोड़ देते हैं।
//Calculates ship movement rules
var shipVelocityVec = GetVectorPosByAngle(shipMoveSpeed, shipRotationAngle);
var shipUnitVec =$V([Math.cos(shipRotationAngle),Math.sin(shipRotationAngle),0]);
var rawAccel = shipAccelSpeed/shipMass;
var scale = (shipUnitVec.dot(shipVelocityVec))/(shipTopSpeed * shipTopSpeed);
var v1 = shipUnitVec.subtract(shipVelocityVec.multiply(scale));
var finalAccelVec = v1.multiply(rawAccel);
console.log(finalAccelVec);
//move ship according to rules
var shipPosVector = $V([shipxPos, shipyPos, 0]);
var movementVector = shipPosVector.add(finalAccelVec);
shipxPos = movementVector.elements[0];
shipyPos = movementVector.elements[1];
त्वरण गति देने के लिए उपयोगकर्ता को बटन दबाया जाना है। उदाहरण के लिए उपयोगकर्ता बटन को रिलीज़ करता है, त्वरण शून्य पर सेट होता है और अधिकतम त्वरण थ्रॉटल देने के लिए फिर से बढ़ावा देना होता है।
समाधान मिला! यहां पोस्ट किया गया यह कैसे किया गया था।
मुझे लगता है कि यह 2 डी चीज है? अलग एक्स और वाई वेग संकेतक रखें। यदि आप कोण पर जोर दे रहे हैं, तो एक्स और वाई घटकों में एंग्लेड जोर डालें, जिससे आप जहाज के एक्स/वाई वेग घटकों को अलग-अलग समायोजित कर सकते हैं। प्रत्येक गति समायोजन पर, जहाज की गति की जांच करें और यदि आप अधिकतम पहुंच गए हैं तो समायोजन रोकें। –
कृपया मुझे सही करें मैं गलत तरीके से हूं, लेकिन छवि # 3 में लाल अंगूठी की तुलना में गति की तुलना में संयुक्त वेक्टर नहीं है? – pimvdb
नहीं, क्योंकि एक्स और वाई दोनों ने कहा था कि सर्कल अधिकतम आंदोलन के बराबर है। हरी रेखा लंबी हो सकती है। # 3 में हरी रेखा सर्कल के व्यास की पूरी लंबाई होनी चाहिए। –