Як я можу знайти кут пуску снаряда?


9

Я роблю 2d гру, в якій одиниці стріляють стрілами. Я знаю позицію стрільця та цілі та початкову швидкість снаряда. Я хочу знати, кут повинен мати снаряд, щоб приземлитися на ціль. Мета може бути на іншій висоті, ніж стрілець.

Підводячи підсумок, я знаю v0, R і g, і мені потрібно знайти кут (або висоту?).

Я читаю http://en.wikipedia.org/wiki/Projectile_motion , але не можу знайти щось, що стосується того, що мені потрібно.


Це залежить від того, чи хочете ви дотримуватися реалістичної балістичної кривої чи достатньо хороша парабола.
AB.

Ви хочете включити вітер? Або будь-яке інше горизонтальне прискорення? (Звичайно, це робить математику важче)
Сет Баттін


Я хочу досягти реалістичного руху снаряда, і вітер не задіяний.
korn3l

Відповіді:


11

Формула для знаходження кута є

Формула

де v - початкова швидкість запуску, g - постійна сили тяжіння, x і y - відстань і висота цілі.

Два корені цього рівняння дають два можливі кути. Якщо результати уявні, то ваша початкова швидкість недостатньо велика для досягнення цілі (якщо ви хочете обчислити кут досягнення, прочитайте це ). Від вас залежить, який кут обраний. Було б сенс вибрати найбільш прямий шлях, тобто менший кут.

Ви можете побачити GIF цього рівняння нижче з різними цільовими значеннями та постійною швидкістю запуску.

Формула схопилася як анімований GIF

Ресурси з цієї статті вікіпедії


Зауважте, що в більшості випадків є два дійсних рішення. Якщо припустити, що немає тяги або подібного максимуму, досягнутий, коли снаряд вистріляється під кутом 45 градусів. Піднімаючись вище АБО нижче, це зменшить дальність - таким чином, якщо вам не знадобиться кожен кус омфа від вашої гармати, буде і вищий, і нижчий рішення.
Лорен Печтел

Ви, мабуть, взяли б кут, який має найкоротший час польоту, який, як правило, менший кут (напевно, завжди, але я дозволяю собі можливість помилково помилитися хе). Швидше стріляти в землю перед ногами, прицілюючись вниз, ніж націлюючись на дуже крутий кут.
Азарал

@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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.