4 votos

Movimiento de proyectiles con ecuaciones diferenciales

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.

0voto

David K Puntos 19172

Creo que la idea de combinar $x$ y $z$ en una sola coordenada lateral es una buena. Así que tienes un plano cuyas coordenadas llamaré $r$ y $h,$ donde $r = \sqrt{(x - x(0))^2 + (z - z(0))^2}$ es la distancia lateral desde el punto de lanzamiento del proyectil y $h = y - y(0)$ es la altura relativa sobre ese punto.

Para cualquier velocidad inicial $v,$ en cada punto de ese plano hay un tiempo mínimo en el que ese punto puede ser alcanzado por un proyectil. Es decir, este tiempo es una función de $v,$ $r,$ y $h$ : llámalo $\tau(v,r,h).$ El ángulo de lanzamiento $\varphi$ que permite llegar a ese punto en ese momento es también una función de $v,$ $r,$ y $h,$ $\varphi(v,r,h).$

Se podría poner el movimiento del objetivo en las mismas dos coordenadas, es decir, expresar su movimiento en términos de las dos funciones $r = r_T(t)$ y $h = h_T(t).$ Entonces $f(t) = \tau(v, r_T(t), h_T(t)) - t)$ es una función de $t$ solo. Encuentra un cero de $f.$ Habiendo encontrado $t_1$ tal que $f(t_1) = 0,$ el ángulo de elevación para alcanzar el objetivo es $\varphi(v,r_T(t_1),h_T(t_1))$ y el acimut $\theta$ puede derivarse de los componentes de la horizontal desplazamiento horizontal en ese momento, $x_T(t_1) - x(0)$ y $z_T(t_1) - z(0).$

El truco para hacerlo rápidamente es calcular $\tau(v,r,h)$ rápidamente. Sugiero una gran tabla tridimensional precalculada que dé valores de $\tau(v,r,h)$ en muchos valores posibles de $v,$ $r,$ y $h.$ Para los valores reales de $v,$ $r,$ y $h$ que se encuentra mientras tratando de encontrar un cero de $f,$ se interpola dentro de la tabla. Si hace que los "pasos" entre las coordenadas de entrada en su tabla lo suficientemente pequeño, la interpolación lineal debería ser correcta. La cuestión de la interpolación lineal en un $n$ -tabla de dimensiones ( $n=3$ en este caso) se ha abordado en Fórmula para $N$ -Interpolación lineal dimensional y Estimación de trayectorias lineales en campos vectoriales. (También puede buscar en la web "interpolación multilineal").

0voto

Calvin John Puntos 36

Estoy un poco confundido con respecto a su edición: "No me importa cuándo se produce el momento del impacto; sólo necesito que las trayectorias se crucen en un momento determinado". Una vez que haya $\mathbf{Y}(t)$ y $\mathbf{X}(t,\theta,\phi,v)$ , determinando los insumos $\theta$ y $\phi$ tal que $\mathbf{Y}(t_{c}) = \mathbf{X}(t_{c},\theta,\phi,v)$ durante un tiempo de colisión $t_{c}$ es sólo manipulación algebraica y resolución de ecuaciones.

Por ejemplo, su modelo tiene la siguiente solución para $x(t)$ : $$x(t) = c_{1} + 100v\cos(\theta)\cos(\phi)(1-e^{-.01t}).$$ Llama a la función $x$ coordenadas $x_{T}$ . Dado un tiempo de colisión deseado $t_{c}$ , simplemente hay que poner $x(t_{c})=x_{T}(t_{c})$ : $$x(t_{c}) = x_{T}(t_{c})\rightarrow \cos(\theta)\cos(\phi) = \frac{x_{T}(t_{c})-c_{1}}{100v(1-e^{-.01t_{c}})}.$$ Una vez que se resuelve $y_{T}(t_{c}) = y(t_{c})$ y $z_{T}(t_{c}) = z(t_{c})$ de manera similar, entonces tendrá suficiente información para resolver explícitamente para $\phi$ y $\theta$ y ya está.

Tenga en cuenta que, al tratarse de un problema de control, también puede estar experimentando una serie de problemas. Para empezar, su capacidad para planificar una colisión depende en gran medida de las trayectorias y velocidades del proyectil y del objetivo. Otra cosa a tener en cuenta es que para cualquier $t_{c}$ definitivamente hay un umbral máximo de tiempo $t^{*}<t_{c}$ pasado que planea una colisión para $t_{c}$ ya no es factible.

El tiempo de iteración del algoritmo de planificación de colisiones es otro parámetro crucial que requiere un ajuste sofisticado, ya que si el algoritmo de control opera con demasiada frecuencia pueden surgir problemas de estabilidad, pero si se opera con poca frecuencia es más probable que se pierda el tiempo de umbral y no se pueda realizar la colisión.

Aunque este último problema sólo puede ocurrir en un modelado más realista en el que la simulación sigue activa mientras el algoritmo de control está funcionando. Así que probablemente puedas ignorarlo. Por favor, hágame saber si usted tiene cualquier otra pregunta, o si me perdí lo que está pidiendo. Tengo mucha experiencia con el modelado de colisiones basado en el control y me encantaría ayudar.

0 votos

No sé el tiempo de colisión ni la ubicación porque es un objetivo en movimiento. Tengo que elegir los parámetros de lanzamiento para que el objetivo y el proyectil se encuentren al mismo tiempo, lo que significa esencialmente que si lanzo el proyectil con los ángulos dados, chocará con el objetivo, que puede haberse movido. La trayectoria del objetivo no tiene una descripción analítica.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X