Imagine un "dron" y un punto objetivo en un plano 2D. Hay ocho parámetros:
P = my position
Q = target position
V = my velocity
I = my moment of inertia
w = my angular velocity
s = my angular position
T = max thrust
U = max torque
(solo diremos que el objetivo es estacionario)
El trabajo del dron es llegar al objetivo lo más rápido posible, obedeciendo el par máximo y el empuje máximo. Solo hay dos formas de aplicar el par, ya que esto es solo en un plano 2d. El empuje está restringido para ir solo en una dirección en relación con la orientación de la nave, y no puede apuntar sin girar el dron. Descuida cualquier resistencia, solo puedes fingir que está flotando en el 2d espacio exterior. Digamos que el dron verifica una ecuación en el intervalo de tiempo t
(tal vez algo así como cada 0,01 segundos), conecta los parámetros y ajusta su par y empuje en consecuencia. ¿Cuáles deberían ser las ecuaciones de empuje y par?
Respuestas:
A la luz del contexto de su pregunta, http://nodewar.com/ , hay un par de consideraciones específicas para su solución:
Estos métodos son los que decidí trabajar para alcanzar la aceleración deseada.
Aceleración, no velocidad
Como ya tiene una velocidad determinada y su objetivo se está moviendo, no necesita empujar hacia un punto. Necesita empuje para cambiar su velocidad a lo que debería ser. Esto significa que su nave necesita apuntar no hacia dónde va, sino en la dirección en la que debe acelerar.
Dirección hacia la derecha
Tienes un vector de aceleración, ahora quieres aplicarlo. Determine qué tan lejos necesita rotar. Probablemente usé más pasos de los requeridos aquí, pero las coordenadas de rotación me confunden, y creo que el valor de rotación de la nave sin tapar es un error en la API de todos modos.
Una formula simple. No hay daño en girar todo el tiempo, así que no se moleste en aplicar valores par parciales. Si necesita una pequeña corrección en la velocidad angular, puede hacer esta determinación muchas veces por segundo, de todos modos.
Una fórmula menos simple. Llegará un punto en el que no querrás seguir girando, porque eventualmente quieres detenerte. Afortunadamente, ese límite de velocidad angular significa que puede reducir rápidamente la velocidad angular máxima a cero. Solo necesita calcular cuándo hacerlo.
Después de ajustar el código anterior para satisfacer sus necesidades, su nave debe rotar rápida y precisamente a cualquier ángulo que le haya dado al objetivo.
Velocidad de embestida
Entonces, ¿cuándo empujar? Nuevamente, el rápido cambio del objetivo y otros factores crean una gran dificultad para resolver una solución exacta. No lo intentes
Para aquellos casos en los que necesita un empuje parcial, puede confiar nuevamente en el hecho de que puede elegir entre 0 y 1 empuje muchas veces por segundo. Esto le proporciona un empuje parcial efectivo sin variar el valor real.
¡Buena suerte!
fuente
Una pregunta similar, con algunas buenas respuestas, incluido el nombre aparente de todo este tema, "planificación de movimiento":
/programming/2560817/2d-trajectory-planning-of-a-spaceship-with-physics
Como programador, me gusta la practicidad de la sugerencia de user470365. Sin embargo, intentaré un enfoque más riguroso. Mi sugerencia aquí calcula un plan completo al comienzo, pero supongo que podría volver a evaluar con la frecuencia que desee si los parámetros están cambiando.
El plan
Detalles
Sugiero métodos iterativos para encontrar d y t :
Asumiendo que no hay empuje, recorre la trayectoria futura del dron usando un bucle y un pequeño paso de tiempo:
Ahora hemos encontrado d y t .
Torneado
Cuando digo "girar a d ", realmente quiero decir, "hacer una secuencia de pares de tal manera que giremos hacia d lo más rápido posible mientras también llevamos la velocidad angular a cero". Probablemente hay una ecuación para esto que involucra la dirección actual, la velocidad angular actual y la aceleración angular máxima, pero se complica por el comportamiento envolvente de los ángulos.
fuente