मैं प्रक्षेप्य प्रक्षेपण कोण कैसे पा सकता हूं?


9

मैं एक 2d गेम बना रहा हूं जिसमें इकाइयाँ एक दूसरे पर तीर चलाते हैं। मैं निशानेबाज और लक्ष्य की स्थिति और प्रक्षेप्य के प्रारंभिक वेग को जानता हूं। मैं लक्ष्य पर उतरने के लिए प्रक्षेप्य कोण को जानना चाहता हूं। निशानेबाज निशानेबाज से अलग ऊंचाई पर हो सकता है।

योग करने के लिए मुझे v0, R और g पता है और मुझे कोण (या ऊँचाई?) खोजने की आवश्यकता है।

मैं http://en.wikipedia.org/wiki/Projectile_motion पढ़ता हूं , लेकिन मुझे जो चाहिए उससे संबंधित कुछ नहीं मिल सकता है।


यह निर्भर करता है कि क्या आप यथार्थवादी बैलिस्टिक वक्र से चिपके रहना चाहते हैं या एक पैराबोला काफी अच्छा है।
एबी।

क्या आप हवा को शामिल करना चाहते हैं? या कोई अन्य क्षैतिज त्वरण? (यह गणित को कठिन बना देता है, निश्चित रूप से)
सेठ बट्टिन


मैं एक यथार्थवादी प्रक्षेप्य गति प्राप्त करना चाहता हूं और इसमें कोई हवा शामिल नहीं है।
korn3l

जवाबों:


11

कोण खोजने का सूत्र है

सूत्र

जहाँ v प्रारंभिक प्रक्षेपण गति है, g गुरुत्वाकर्षण स्थिरांक है, x और y लक्ष्य की दूरी और ऊँचाई है।

इस समीकरण की दो जड़ें आपको दो संभावित कोण देती हैं। यदि परिणाम काल्पनिक हैं तो आपका प्रारंभिक वेग लक्ष्य तक पहुंचने के लिए पर्याप्त नहीं है (यदि आप इसे पढ़ने के लिए पहुंच के कोण की गणना करना चाहते हैं )। यह आपके ऊपर है कि कौन सा कोण चुना गया है। यह सबसे सीधा रास्ता यानी छोटे कोण को चुनने के लिए समझ में आता है।

आप अलग-अलग लक्ष्य मान और निरंतर लॉन्च वेग के साथ इस समीकरण का GIF देख सकते हैं।

फॉर्मूला को एनिमेटेड GIF के रूप में रेखांकन किया गया है

इस विकिपीडिया लेख से संसाधन


ध्यान दें कि ज्यादातर मामलों में दो वैध समाधान हैं। जब कोई प्रक्षेप्य 45 डिग्री के कोण पर निकाल दिया जाता है तो कोई ड्रैग या जैसी अधिकतम सीमा नहीं होती है। उच्च या निम्न पर जाने से श्रेणी कम होगी - इस प्रकार जब तक आपको अपनी बंदूक से प्रत्येक बिट के ओम्फ की आवश्यकता नहीं होगी, तब तक उच्च और निम्न दोनों समाधान होंगे।
लॉरेन Pechtel

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

@StephenTierney उत्तर के लिए धन्यवाद। यह वही है जिसे मैं देख रहा था।
korn3l

इस समस्या का बहुत सरल समाधान मिला, en.wikipedia.org/wiki/…
स्टीफन टियरनी

2

इस साल की शुरुआत में मैंने एक साधारण टॉप डाउन शूटर बनाया। मैंने निम्नलिखित विधि का उपयोग किया:

पहले उत्तर: /programming/15364852/move-sprite-diagonally/15365570#15365570

public static class Helper_Direction
{

    // Rotates one object to face another object (or position)
    public static double FaceObject(Vector2 position, Vector2 target)
    {
        return (Math.Atan2(position.Y - target.Y, position.X - target.X) * (180 / Math.PI));
    }

    // Creates a Vector2 to use when moving object from position to a target, with a given speed
    public static Vector2 MoveTowards(Vector2 position, Vector2 target, float speed)
    {
        double direction = (float)(Math.Atan2(target.Y - position.Y, target.X - position.X) * 180 / Math.PI);

        Vector2 move = new Vector2(0, 0);

        move.X = (float)Math.Cos(direction * Math.PI/180) * speed;
        move.Y = (float)Math.Sin(direction * Math.PI / 180) * speed;

        return move;
    }
}

यह दो पदों के बीच एक प्रक्षेपवक्र की गणना करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.