¿Cómo puedo encontrar el ángulo de lanzamiento de un proyectil?

9

Estoy haciendo un juego 2D en el que las unidades se disparan flechas entre sí. Sé la posición del tirador y del objetivo y la velocidad inicial del proyectil. Quiero saber el ángulo que debe tener el proyectil para aterrizar en el objetivo. El objetivo podría estar a una altura diferente que el tirador.

Para resumir, sé que v0, R y gy necesito encontrar el ángulo (¿o la altura?).

Leí http://en.wikipedia.org/wiki/Projectile_motion , pero no puedo encontrar algo relacionado con lo que necesito.

korn3l
fuente
Depende de si desea seguir una curva balística realista o es una parábola lo suficientemente buena.
AB.
¿Quieres incluir el viento? ¿O alguna otra aceleración horizontal? (Hace que las matemáticas sean más difíciles, por supuesto)
Seth Battin
Quiero lograr un movimiento de proyectil realista y no hay viento involucrado.
korn3l

Respuestas:

11

La fórmula para encontrar el ángulo es

Fórmula

donde v es la velocidad de lanzamiento inicial, g es la constante de gravedad, x e y son la distancia y la altura del objetivo.

Las dos raíces de esta ecuación te dan dos ángulos posibles. Si los resultados son imaginarios, entonces su velocidad inicial no es lo suficientemente grande como para alcanzar el objetivo (si desea calcular el ángulo de alcance, lea esto ). Depende de usted qué ángulo se selecciona. Tendría sentido elegir la ruta más directa, es decir, el ángulo más pequeño.

Puede ver un GIF de esta ecuación a continuación con diferentes valores objetivo y una velocidad de lanzamiento constante.

Fórmula graficada como GIF animado

Recursos de este artículo de Wikipedia

Stephen Tierney
fuente
Tenga en cuenta que en la mayoría de los casos hay dos soluciones válidas. Suponiendo que no se alcanza el arrastre o el rango máximo similar cuando se dispara el proyectil en un ángulo de 45 grados. Ir más alto o más bajo reducirá el rango, por lo tanto, a menos que necesite cada empuje de su arma, habrá una solución más alta y una más baja.
Loren Pechtel
Probablemente tomarías el ángulo que tiene el menor tiempo de vuelo, que generalmente es un ángulo más pequeño (probablemente siempre, pero me estoy permitiendo la posibilidad de equivocarme con gracia, je). Es más rápido disparar al suelo frente a tus pies apuntando hacia abajo que apuntando hacia arriba en un ángulo realmente empinado.
Azaral
@StephenTierney Gracias por la respuesta. Esto es lo que estaba buscando.
korn3l
Encontré una solución mucho más simple a este problema, información de en.wikipedia.org/wiki/…
Stephen Tierney
2

A principios de este año, creé un simple tirador de arriba hacia abajo. Usé el siguiente método:

Respuesta anterior: /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;
    }
}

Calcula una trayectoria entre dos posiciones.

Deukalion
fuente