He estado intentando escribir un código que calcule los ángulos de intercepción necesarios para que el lanzamiento de un proyectil alcance un objetivo en movimiento, una persona corriendo por un mundo de juego. No tengo problemas para programar cosas, pero necesito un poco de ayuda con las matemáticas.
El movimiento del proyectil en un sistema de coordenadas cartesianas de 3 dimensiones se modela como las soluciones a los siguientes problemas de valor inicial (aprovechando el hecho de que el movimiento a lo largo de un eje es independiente de los demás). El sistema de coordenadas se gira de forma que y apunte "hacia arriba" (en contra de la dirección de la gravedad), y x y z apunten "horizontalmente". Sigue siendo un eje derecho. Perdona las ecuaciones ASCII; no tengo suficiente reputación para publicar imágenes.
$x(0) = c_1$
$x'(0) = v \cos()\cos()$
$x''(t) = -0.01x'(t)$
$y(0) = c_3$
$y'(0) = v \sin()$
$y''(t) = -0.03 + -0.01y'(t)$
$z(0) = c_2$
$z'(0) = v \sin()\cos()$
$z''(t) = -0.01x'(t)$
(ángulo horizontal), (ángulo de elevación) y v son los parámetros de lanzamiento, pero sólo puedo controlar los dos ángulos.
No tengo ningún problema en resolver estas ecuaciones diferenciales para derivar las componentes de la velocidad del proyectil, pero tengo que lidiar con un objetivo en movimiento. Digamos que X (t, , , v) es la posición del proyectil en función del tiempo con unos parámetros de lanzamiento dados que se garantiza que permanecen constantes con respecto al cambio de t. También tengo Y (t) como la posición del objetivo en función del tiempo, que es diferenciable. Sin embargo, esta función no tiene una solución analítica limpia porque la aceleración de la persona en movimiento a menudo no es diferenciable (como cuando se trata de interceptar a alguien que salta de un acantilado - su aceleración será de aproximadamente -0,03 m/s^2 hasta que toca el suelo, cuando de repente pasa a 0). Sé que puedo eliminar esta discontinuidad, pero todavía me queda una función a trozos que es realmente difícil de usar. Esto hizo que mi segunda aproximación modelando las posiciones relativas, velocidades y aceleraciones con ecuaciones diferenciales fallara.
También he probado a simplificar las coordenadas x y z en una sola coordenada, y a modelar el proyectil como si viajara en un arco dentro de un plano; esto funciona bien, ya que no hay viento, y puedo dar a cualquier objetivo estático en el rango con precisión. Pero esto sólo calcula en base a la posición del objetivo y esencialmente calcula una función Z() que es la altitud del proyectil cuando está directamente por encima o por debajo del objetivo. Luego calculo las raíces de Z usando el método de Newton, obteniendo el ángulo (a veces dos).
Intenté adaptar el método estático calculando el tiempo de vuelo del proyectil a la posición original del objetivo, usando esto para estimar la posición movida del objetivo, repitiendo durante unas pocas iteraciones, y luego disparando en la posición movida final, pero este método resultó en una peor precisión que simplemente repartiendo los disparos alrededor del objetivo estático. Creo que se desvió.
Ahora estoy atascado. No puedo encontrar un método numérico para encontrar los parámetros de lanzamiento necesarios dada la posición del objetivo Y (t) en función del tiempo y una función X (t, , , v) y sus derivadas. ¿Hay algo que ofrezca un grado razonable de precisión (10% más o menos) sin nada que un procesador Intel moderno no pueda hacer en unos 50ms?
Editar No me importa el momento del impacto, sólo necesito que las trayectorias se crucen en un momento determinado. Puedo calcular la posición del objetivo en cualquier momento del futuro próximo (o del pasado).
3 votos
Consulta el siguiente enlace sobre cómo formatear el texto matemático con Mathjax: meta.math.stackexchange.com/questions/5020/
1 votos
No use una imagen; use Mathjax. Además, ¿fijas los tiempos en los que quieres que se produzca la colisión? ¿Y eres capaz de "mirar en el futuro de $Y$ " para saber dónde estará (es decir, fijar la hora en la que quieres acertar, calcular la posición del objetivo en ese momento y calcular el tiempo y los ángulos de disparo)? Además, algo más de detalle sobre lo que has probado podría ser útil.