2009-07-29 20 views
13

Tengo un juego en el que estoy trabajando que tiene misiles homing. En este momento, solo se vuelven hacia su objetivo, lo que produce un resultado bastante tonto, con todos los misiles siguiendo al blanco.¿Cómo crear un "misil de interceptación" para un juego?

Quiero crear un sabor más mortífero del misil que apunte al lugar donde el objetivo "estará" cuando llegue y me estoy atascando y confundido acerca de cómo hacerlo.

Supongo que tendré que adivinar dónde estará mi objetivo en algún momento en el futuro (una suposición de todos modos), pero no entiendo qué tanto mirar. Debe basarse en cuán lejos está el misil del objetivo, pero el objetivo también se mueve.

Mis misiles tienen un empuje constante, combinado con una débil capacidad de giro. La esperanza es que sean rápidos y emocionantes, pero vira como una vaca (es decir, mal, para los fanáticos que no son HitchHiker).

De todos modos, parecía ser un tipo de problema divertido para Stack Overflow que me ayudara a resolver, así que cualquier idea o sugerencia sobre misiles mejores o "más divertidos" sería bienvenida.

El siguiente paso será la IA para esquivar ellos ...

+1

BTW: no ha mencionado si sus misiles son atmosféricos o no. ¿Utilizan sus superficies de control o su empuje para cambiar su vector? La simplificación del rumbo constante continúa funcionando de cualquier manera, pero se obtienen comportamientos diferentes/interesantes con misiles atmosféricos a diferentes velocidades. P. ej., El Sidewinder inmediatamente después del lanzamiento es en gran medida un rastro de humo de serpiente, no tanto inmediatamente antes del impacto. –

+3

El apodo "sidewinder" proviene de su trayectoria de vuelo hacia adelante y hacia atrás ... Cuando se lanzó por primera vez, es lento y extrae una gran cantidad de plomo para llegar al curso de colisión. A medida que se acelera, necesita menos plomo y vuelve hacia el objetivo. Después de que el motor se quema y comienza a desacelerarse, tira del plomo una vez más. El resultado neto es un rastro de humo de mano de vuelo que se parece mucho al movimiento lateral de una serpiente de cascabel sobre la arena. –

+1

Este efecto Sidewinder fue uno de los factores motivadores detrás de agregar la característica de proporcionalidad variable a los misiles guiados por radar. No tiene sentido tirar de plomo adicional temprano cuando el cierre es bajo, si vas a acelerar y necesitas menos plomo de todos modos ... Entonces, para los misiles de radar que 'saben' el cierre, basan la velocidad del misil de cierre de giro y esto causa ellos para extraer menos plomo adicional temprano cuando no van a necesitarlo más tarde. –

Respuesta

21

Lo que está sugiriendo se llama "Guía de comandos", pero hay una manera más fácil y mejor.

La forma en que los misiles reales en general lo hacen (no todos son iguales) está utilizando un sistema llamado navegación proporcional. Esto significa que el misil "gira" en la misma dirección que la línea de vista (LOS) entre el misil y el objetivo está girando, a una tasa de giro "proporcional" a la tasa de LOS ... Esto hará lo que eres preguntando como cuando la tasa LOS es cero, estás en curso de colisión.

Puede calcular la velocidad de LOS simplemente comparando las pendientes de la línea entre misil y destino de un segundo al siguiente. Si esa pendiente no está cambiando, estás en curso de colisión. si está cambiando, calcule el cambio y gire el misil con una velocidad angular proporcional ... puede usar cualquier métrica que represente la posición del misil y del objetivo.

Por ejemplo, si usa una constante de proporcionalidad de 2 y el LOS se mueve hacia la derecha a 2 grados/segundo, gire el misil hacia la derecha a 4 grados/segundo. LOS a la izquierda a 6 grados/seg, misiles a la izquierda a 12 grados/seg ...

En 3-d el problema es idéntico, excepto que el "Cambio en la tasa de LOS" (y la tasa resultante de giro de misiles) es en sí mismo un vector, es decir, tiene no solo una magnitud, sino una dirección (¿Giro el misil a la izquierda, derecha o arriba o abajo o 30 grados por encima de la horizontal a la derecha, etc.? ... Imagine, como piloto de misiles , donde "pondrías las alas" para aplicar el ascensor ...

misiles guiados por radar, que "conocen" la tasa de cierre. ajustar la constante de proporcionalidad basada en el cierre (cuanto mayor sea el cierre, más rápido intentará el misil girar), de modo que el misil girará más agresivamente en escenarios de alto cierre (cuando el tiempo de vuelo es más bajo), y menos agresivo en cierre bajo (persecuciones de cola) cuando necesita conservar energía. Otros misiles (como Sidewinders), que no conocen el cierre, usan un valor de proporcionalidad predeterminado y predeterminado). FWIW, Vietnam siderder AIM-9 utilizó una constante de proporcionalidad de 4.

+4

+1 para dar la respuesta que estaba a punto de escribir. Resumen para el lector casual: si el rumbo del objetivo está cambiando hacia la izquierda, gire a la izquierda. Si va a la deriva, gire a la derecha. Si tiene un rumbo constante (que no sea directamente detrás de ti), estás en un curso de interceptación. Sidenote: esto también funciona en una rampa de entrada en la carretera cuando intentas fusionarte. Si ves un automóvil con un rumbo constante que se hace cada vez más grande a tu vista, necesitas hacer un cambio ... –

+0

@Bob, ¡incluso funciona cuando el objetivo está detrás de ti! El único problema es cuál es el cierre ... Si la tasa de LOS es cero (LOS constantes y estables), es posible que se esté acercando al objetivo o se aleje, pero está en curso de colisión. Esta es, de hecho, exactamente la forma en que funcionan la mayoría de los misiles aire-aire. –

+0

@elliot, Esto no producirá un curso de colisión. Puede que ni siquiera genere un curso de interceptación. Cuando dices "viajar más rápido que el objetivo", sospecho que en realidad no estás hablando de tu velocidad, encarga tu cierre al objetivo. Claramente, si detienes "girando hacia tgt" una vez que eres "... más rápido que el tgt", entonces en ese punto es posible que apuntes en una dirección completamente equivocada. Pero incluso si se refería al cierre, este no es el mejor curso de colisión. Y en algunos casos (cuando se conduce con menos de la velocidad del tgt), girar hacia tgt reducirá el cierre incluso furthur. –

16

he utilizado este artículo antes de CodeProject - tiene algunas animaciones realmente agradables para explicar las matemáticas.

"Las Matemáticas de focalización y Simulación de un misil: De Cálculo de la Fórmula cuártica": http://www.codeproject.com/KB/recipes/Missile_Guidance_System.aspx

(también, escondido en los comentarios en la parte inferior de dicho artículo es una referencia a some C++ code that accomplishes the same task desde el wiki de Unreal)

+0

+1, artículo excelente, incluso si requiere un gran compromiso para leer cuándo PODRÍA proporcionar el (los) algoritmo (s). –

+0

Me hubiera gustado aceptar esta respuesta también, ya que el artículo es muy bueno. He votado y recomiendo que otros hagan lo mismo. –

0

Querrá interpolar la trayectoria del objetivo y el misil en función del tiempo. Luego, busque los tiempos en que las coordenadas de los objetos se encuentran dentro de un error aceptable.

1

¿Ha considerado comentarios negativos sobre el reciente cambio de rumbo por cambio de tiempo?

Detalles a la izquierda como un ejercicio.

Las sugerencias son completamente serias: si el objetivo no maniobra, esto debería obtener una interceptación casi óptima. Y debería converger incluso si el objetivo está esquivando activamente.

¿Necesita más información?

Resolviendo en un espacio bidimensional para facilitar la notación. Tome \vec{m} para ver la ubicación del misil y el vector \vec{t} Para ser la ubicación del objetivo. El encabezado actual en la dirección del movimiento sobre la unidad de la última vez: \vec{h} = \bar{\vec{m}_i - \vec{m}_i-1}}. Deje r ser el vector normalizado entre el misil y el objetivo: \vec{r} = \bar{\vec{t} - \vec{m}}. El rodamiento es b = \vec{r} \dot \vec{h} Calcule el rodamiento en cada marca de tiempo, y el cambio del mismo, y cambie el rumbo para minimizar esa cantidad.

Las matemáticas son más frecuentes en 3D debido a la necesidad de encontrar el plano de acción en cada paso, pero el proceso es el mismo.

+1

@dmckee: Creo que has votado negativamente porque la mayoría de las personas que leen esta respuesta no tendrán idea de lo que eres diciendo, y la versión original de su pregunta no dijo prácticamente nada. –

+0

La realidad del problema de interceptación de misiles ingenua es más simple que esto. Está calculando un vector de intercepción que podría proporcionarle a un luchador inteligente. Un misil está perfectamente satisfecho con "Me estoy acercando", por lo que la simplificación de rumbo constante discutida en otras respuestas es perfectamente aceptable para esta aplicación. –

+0

@Bob: Este * es * el enfoque de soporte constante. La retroalimentación negativa en , conduce a una entrada constante. Retraso de módulos y tasas de cambio, lo que podría requerir un controlador PID en lugar de un simple circuito proporcional. – dmckee

5

Eche un vistazo a OpenSteer. Tiene código para resolver problemas como este. Mire 'steerForSeek' o 'steerForPursuit'.

Cuestiones relacionadas