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.
En este ejemplo, los objetivos están detrás del vehículo de lanzamiento, pero se dibujan los caminos precalculados.
fuente
Respuestas:
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.
Determine el vector entre el jugador y el misil.
Conviértalos en vectores unitarios.
Determina el ángulo entre los vectores.
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).
Crea el nuevo vector de movimiento.
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.
fuente
SIGN
en el paso 4?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:
... 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.
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í:
Una vez que se elige el objetivo, puede aplicar lo que dije anteriormente con los ángulos adecuados.
fuente
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 .
fuente
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.
fuente
Creo que el algoritmo más simple solo seguiría dos reglas:
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.
De lo contrario, gire hacia el objetivo hasta apuntarlo.
Para calcular el punto donde termina el giro en 2D:
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.
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.
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.
fuente