¿Cómo encuentras la velocidad inicial y el ángulo necesarios para alcanzar una coordenada y una cierta altura?

Problema

Para un motor de juego que estoy escribiendo, necesito una función que devuelva la velocidad inicial y el ángulo del lanzamiento de un proyectil, de modo que el objeto afectado alcance una altura máxima determinada y termine en una coordenada específica. El mundo es 2D desde un lado, por el bien de los cálculos.

Entonces se sabe lo siguiente:

  • X inicial
  • A partir de Y
  • Objetivo X
  • Objetivo Y
  • Altura máxima requerida
  • Gravedad

Y necesito calcular lo siguiente:

  • Velocidad inicial
  • Ángulo de lanzamiento

(O la velocidad inicial en X y la velocidad inicial en Y.)

Mi investigación

He buscado la fórmula que me daría esto, pero no puedo encontrar ninguna. Así que decidí deducirlo yo mismo, con mis limitadas habilidades en ecuaciones matemáticas.

La página de Wikipedia sobre el movimiento de proyectiles fue mi destino para la mayoría de mis esfuerzos. Puedo convertir algunas de las fórmulas provistas allí, pero solo a cosas que devolverían el ángulo de lanzamiento cuando se conoce la velocidad , o para devolver la velocidad cuando se conoce el ángulo de lanzamiento (entre otras variables conocidas). No puedo entender exactamente cómo obtener una fórmula que me devuelva dos incógnitas, ni cómo manipular las fórmulas existentes para satisfacer esas necesidades.

Intenté tomar la fórmula para la distancia máxima de un proyectil, de esa página y la fórmula de altura máxima, también de la misma página , y las introduje en Wolfram Alpha , pidiéndole que me resuelva la velocidad y el ángulo. La salida me parece una tontería, e incluso se refiere a una nueva variable, n. Sin mencionar que esta respuesta tampoco me permitiría usar la altura objetivo, y cuando traté de conectar la fórmula de Wikipedia que lo hizo, Wolfram Alpha ni siquiera entendió mi entrada. Así que abandoné la idea.

Ningún enfoque consideraría siquiera el requisito de altura máxima previsto. Finalmente, entre muchas búsquedas, me topé con esta respuesta y pude implementarla. Podría usar esta coordenada intermedia como X = (objetivo X + inicio X) / 2, e Y = altura máxima requerida. Esto funciona perfectamente, pero solo si el objetivo Y es el mismo que el Y inicial... Esto se puede ver en el GIF de la publicación, cuando el punto intermedio está a la mitad de la distancia horizontalmente, pero el punto objetivo y el punto inicial tienen diferentes alturas: - la trayectoria va más arriba que el punto intermedio.

Esta parece ser mi mejor apuesta, pero no tengo idea de cómo tomar ese enfoque y forzar la altura para alcanzar el nivel deseado. Si trato de cambiar la componente Y de la velocidad inicial al valor dado por la fórmula de altura máxima: ( 2 gramo y ) , eso romperá todo el cálculo y hará que el proyectil pierda su objetivo (nuevamente, cuando la altura inicial es diferente de la altura del objetivo).

(Nota: soy consciente de que algunas trayectorias pueden ser imposibles; puedo manejar estos casos y hacer que el proyectil no alcance el objetivo a propósito).

Conclusión

Este código es necesario para permitir que los jugadores arrojen objetos de manera que aterricen exactamente donde el jugador apunta, pero cada objeto tiene una altura máxima que puede alcanzar, lo que obliga al jugador a usar los objetos correctos para el trabajo.

Después de pasar días en esto, estoy completamente perdido en cuanto a cómo abordar este problema. ¿Es incluso una fórmula posible, o es matemáticamente imposible de determinar?

Sospecho que Game Development podría ser más adecuado para esta consulta

Respuestas (1)

Puede resolver este problema con las fórmulas estándar que se aplican al movimiento de proyectiles. Sabiendo que la velocidad vertical es cero en la parte superior, puede usar la distancia vertical para encontrar el tiempo y la velocidad vertical inicial. Del mismo modo, la distancia de retroceso determina el tiempo de inactividad. El tiempo total con la distancia horizontal da la velocidad horizontal.