¿Cómo calcular el giro hacia un misil?

14

Tengo un misil que se dispara desde un barco en ángulo, luego el misil gira hacia el objetivo en un arco con un radio de giro dado. ¿Cómo determino el punto en el arco cuando necesito comenzar a girar para que el misil se dirija directamente al objetivo?

EDITAR

Lo que necesito hacer antes de lanzar los misiles es calcular y dibujar las rutas de vuelo. Entonces, en el ejemplo adjunto, el vehículo de lanzamiento tiene un rumbo de 90 grados y los objetivos están detrás de él. Ambos misiles se lanzan a un rumbo relativo de -45 grados o + 45 grados con respecto al rumbo del vehículo de lanzamiento. Los misiles inicialmente giran hacia el objetivo con un radio de giro conocido. Tengo que calcular el punto en el que el turno lleva el misil al rumbo en el que girará para atacar directamente al objetivo. Obviamente, si el objetivo está a 45 grados o cerca, entonces no hay un giro inicial, el misil simplemente va directo al objetivo.

Después de lanzar el misil, el mapa también mostrará el seguimiento del misil en esta línea como indicación de su trayectoria de vuelo.

Lo que estoy haciendo es trabajar en un simulador que imita el software operativo. Así que necesito dibujar la ruta de vuelo calculada antes de permitir que se lance el misil.

Dos misiles dirigidos a dos objetivos.

En este ejemplo, los objetivos están detrás del vehículo de lanzamiento, pero se dibujan los caminos precalculados.

Tony
fuente
1
¿El encabezado está precalculado o cambia durante la trayectoria? (¿como un misil guía?)
Jonathan Connell
1
¿No sería solo cuando (x2-x1) ^ 2 + (y2-y1) ^ 2 = r ^ 2, donde (x1, y1) es la posición actual del misil y (x2, y2) es el objetivo?
El pato comunista
Tal vez deberías hacer un dibujo de lo que quieres.
aaaaaaaaaaaa
3
¿Es este un problema 2D o 3D?
Steve H
Si está buscando algo como un misil de referencia, puede hacerlo sin utilizar ninguna trigonometría. Ver esta pregunta
BlueRaja - Danny Pflughoeft

Respuestas:

9

Mi matemática puede estar un poco equivocada, por lo que he encontrado la respuesta.

Supongo que quiere hacer el escenario de referencia continua, donde el misil P1 que viaja a una velocidad V1 intenta constantemente girar hacia el jugador P2; pero a un ritmo de giro limitado.

  1. Determine el vector entre el jugador y el misil.

    V2 = P2 - P1
  2. Conviértalos en vectores unitarios.

    V3 = UNIT(V1)
    V4 = UNIT(V2)
    
  3. Determina el ángulo entre los vectores.

    a = ARCCOS(V3 * V4) (* indicating dot product)
  4. Limite el valor del ángulo entre ellos (recuerde que sus funciones trigonométricas probablemente funcionen con radianes, así que pruebe 0.1 como la velocidad de giro).

    a = SIGN(a) * MINIMUM(ABS(a), MaximumTurningRate)
  5. Crea el nuevo vector de movimiento.

    V1 = UNIT(V3.x + SIN(a), V4.y + COS(a)) * MissileSpeed

EDITAR: Esto no tiene un 'punto de partida' ya que es más robusto (y es una implementación más fácil) para el escenario de referencia continua. No necesita encontrar un punto de partida para un círculo: simplemente limite la velocidad a la que el misil puede cambiar de dirección y el resto sucede debido al fantasma en la máquina.

Jonathan Dickinson
fuente
1
Mmm ... si la memoria sirve, creo que necesitas hacer un producto cruzado para obtener la dirección del ángulo. Si solo hace un producto de puntos, sabrá la magnitud del ángulo pero no la dirección (como los productos de puntos pueden tener V3 * V4 = V4 * V3, parece que no hay forma de notar la diferencia de orientación). Entonces, haga el producto de puntos y luego haga un producto cruzado, verificando el signo de la coordenada Z, para encontrar la orientación.
ChrisE
@ChrisE El ejemplo está en 2D (mirando 5.), por lo que la orientación original y la magnitud del ángulo deberían ser suficientes.
Keeblebrox
Calcular el ángulo entre es correcto, pero no estoy seguro de cuál es su intención declarada con el paso 5 O lo que produce. Se supone que el paso 5 agrega el ángulo a al v3 porque no entiendo las matemáticas.
Dlots
Se supone que el paso 5 de @dlots agrega el nuevo 'ángulo de velocidad de giro limitado' al vector de movimiento actual, básicamente cambia la dirección del misil.
Jonathan Dickinson
¿Qué hay SIGNen el paso 4?
Daniel Kaplan
2

Supongo que desea cambiar la dirección cambiando el rumbo de lanzamiento al rumbo del objetivo y luego continuar directamente hacia el objetivo (¡un problema más divertido debería ser golpear el objetivo al girar!).

Tengo que suponer que puede girar con el mismo radio de giro en todas las direcciones (esta es una simplificación que es difícil de ver en misiles reales).

La solución más simple es usar la flexión de 90 ° : los archivos de misiles hasta que su trayectoria forme un ángulo recto con el objetivo. Si gira exactamente en el punto de 90 °, perderá el objetivo exactamente por el radio de giro, ya que debe tener en cuenta el giro en sí. La solución es comenzar a girar exactamente metros de "radio de giro" (?) Antes de alcanzar el punto de 90 °, luego girar formando un arco de 90 ° (tratar de adivinar) para ir directamente a su objetivo.

Esta solución no siempre es factible, por ejemplo, cuando no tiene visibilidad en el camino de 90 ° (edificios u otros obstáculos).

La buena noticia es que la solución funciona para todos los ángulos (no solo los míticos 90 °). El truco es tener en cuenta el espacio necesario para comenzar a girar antes de girar.

Cuanto antes Es por eso que el material de 90 ° es la solución más simple ...

Supongamos que alcanza la visibilidad o el mejor rumbo del objetivo cuando la trayectoria de disparo forma un ángulo de θ °, entonces debe anticipar el giro de la siguiente manera:

(sec(90° - θ°) + tan(90° - θ°)) * turning_radius

... donde secante es el recíproco del coseno. La prueba es trivial y se deja al lector.

En serio, la fórmula proviene de una construcción geométrica simple.

Gráfico de punto de inflexión

La línea negra es la ruta de disparo, mientras que la delgada línea negra es la misma ruta movida hacia el objetivo girando unidades de radio; lo mismo para los rojos que son el camino objetivo.

Los segmentos verdes tienen una longitud de radio de giro, por lo que debería ver que:

AB es la tangente de 90 ° - θ °

BC es la secante.

Ambas líneas verdes que provienen del punto de giro tienen una longitud de radio de giro y son perpendiculares a los dos caminos; lo que significa que el radio de giro es correcto y el arco es tangente a ambos caminos (como debería ser si realiza un giro bajo restricciones físicas).

Avísame si ves algún error.

EDITAR:

El dibujo que está publicado muestra que hay múltiples opciones para la ruta, incluso con el tirador fijo y el objetivo, como puede ver aquí:

ingrese la descripción de la imagen aquí

Una vez que se elige el objetivo, puede aplicar lo que dije anteriormente con los ángulos adecuados.

FxIII
fuente
Tenga en cuenta que este no es un sistema de actualización continua. Dado que el recorrido de referencia requiere más CPU (mucho), esto debería considerarse el enfoque correcto para objetivos fijos o, por supuesto, si se quiere implementar un misil "semi-tonto". La trayectoria se puede parametrizar simplemente dividiendo la ruta en 3 subrutas y el arco se puede aproximar mediante una curva de Bezier.
FxIII
1

Implementaría un "comportamiento de dirección" para el misil. El misil tiene: Una velocidad (un número), una posición (un vector) y una rotación (actual). En cada actualización de tu juego / en cada cuadro, la rotación del misil cambia un poco (hacia el objetivo). Luego, el misil se mueve hacia adelante de acuerdo con su rotación actual y su velocidad actual.

Obviamente, funciona para 2D y 3D, ya que la única diferencia es una dimensión adicional.

Otra posibilidad sería calcular el camino del misil antes de dispararlo. Busque curvas bezier o spline .

Riki
fuente
El problema con el uso de una spline aquí es que necesitaría actualizar continuamente los puntos de control si el objetivo se mueve. Un simple comando de dirección aquí puede ser computacionalmente más barato.
ChrisE
En realidad estoy tratando de calcular previamente el camino hacia el objetivo. Lo que estoy trabajando es un simulador para algunos equipos reales y estoy tratando de imitar el comportamiento del equipo real.
Tony
0

Siento que estás resolviendo el problema incorrecto aquí. Un misil del mundo real no se va a preocupar por dónde girar, simplemente va a girar hasta que apunte a su objetivo. El único cálculo de dónde está involucrado es cuándo comenzar a devolver los controles a neutral ya que un misil del mundo real no puede cambiar instantáneamente su velocidad de giro. Ese cálculo tomará solo la velocidad indicada del misil como valor de entrada y creo que sería calculado previamente.

Loren Pechtel
fuente
2
Un misil del mundo real, especialmente las armas posteriores, tienen sistemas de guía inercial o GPS o ambos en ellos, por lo que se programan para ir a un área de búsqueda y comenzar a buscar un objetivo. Ay de mí si hay un amigo cerca. Se supone que la programación le permite enviar el misil por un camino que evita los amistosos y otros obstáculos, como masas de tierra y transeúntes inocentes.
Tony
0

Creo que el algoritmo más simple solo seguiría dos reglas:

  1. Si el objetivo actual está más cerca del misil que el diámetro de giro, siga recto. Esto evita que el misil orbita alrededor de objetivos cercanos en lugar de llegar a ellos.

  2. De lo contrario, gire hacia el objetivo hasta apuntarlo.

Para calcular el punto donde termina el giro en 2D:

  1. En el punto donde desea comenzar a girar, el centro del círculo de giro se encuentra en una dirección perpendicular al rumbo actual a una distancia de su radio de giro. Tenga en cuenta que hay dos de esos puntos: probablemente desee el más cercano a su objetivo. Calcule esa posición y llámela P.

  2. Ahora puede construir un triángulo en ángulo recto con el ángulo recto en la tangente y dos puntos conocidos: P y su destino. Esto le permite calcular la distancia desde la tangente a su punto objetivo con Pitágoras. Llámalo D.

  3. Ahora necesita calcular la intersección de un círculo de radio D en su destino con su círculo de giro. Obtendrá dos soluciones, que son los dos puntos tangentes en ese círculo donde el misil dejaría de girar (uno para cada dirección de desplazamiento alrededor del círculo). Elige el punto que está delante del misil: esa es tu respuesta.

Adán
fuente