Estoy haciendo una IA rudimentaria para mi desplazamiento lateral y necesito saber si una unidad de IA puede llegar al punto B desde el punto A simplemente dando un salto.
La trayectoria de vuelo de mis personajes es un poco inusual, ya que pueden aplicar fuerza en el aire (como en Jazz Jackrabbit 2 por ejemplo), a diferencia de la trayectoria clásica de un proyectil que trata sobre ...
camino que tomará un proyectil lanzado o lanzado (...) sin propulsión.
... Supongo que mi problema es más sobre un proyectil con propulsión (por ejemplo, cohete).
Para ilustrar esto, así es como se ve la curva de vuelo para mi personaje si salto y presiono continuamente el "botón izquierdo" (se ve diferente en el extremo izquierdo, aquí es donde estaba haciendo algunas maniobras en el aire):
La fuerza aplicada durante el vuelo siempre es paralela al eje X, por lo que es F = (-f, 0) si mantengo "izquierda" y es F = (f, 0) si mantengo "derecha".
Se puede mover mucho como un saltador de esquí:
Por lo tanto, difiere mucho de la trayectoria clásica, que es simplemente una parábola (fuente: wikipedia ):
Para hacerlo más difícil, estoy simulando una resistencia al aire simple para que mis personajes puedan acelerar solo hasta cierto valor de velocidad máxima.
Esto se hace aplicando una pequeña fuerza en la dirección opuesta de desplazamiento :
b2Vec2 vel = body->GetLinearVelocity();
float speed = vel.Normalize(); //normalizes vector and returns length
body->ApplyForce( AIR_RESISTANCE_MULT * speed * speed * -vel, body->GetWorldCenter() );
AIR_RESISTANCE_MULT es una constante que en mi caso es igual a 0.1.
Asumamos que mi personaje es un punto infinitamente pequeño.
Y NO estoy tomando en cuenta las obstrucciones, así que mi pregunta es así ...
Cómo determinar (al menos conjetura confiable), dada la velocidad inicial V, un impulso J = (0, -j) que aplico al personaje al saltar, gravedad G = (0, g) , fuerza F = (+ -f , 0) aplicado continuamente durante el vuelo y AIR_RESISTANCE_MULT si realmente decidimos tener en cuenta la resistencia del aire (esto es opcional) , si un punto se encuentra debajo de la curva dibujada por el camino que tomará mi personaje?
Literalmente no tengo idea de por dónde comenzar con los cálculos y, de hecho, no estoy necesariamente interesado en una respuesta exacta; un hack / aproximación que funcione bien sería genial, ya que la IA de ninguna manera necesita actuar perfectamente.
editar: He decidido resolver esto usando la simulación como Jason sugiere, pero ¿cómo manejar este caso?
¿Debo dibujar un segmento de C a D y verificar si el punto deseado se encuentra debajo de este segmento?
¿O debería buscar binariamente los pasos de tiempo entre C y D para buscar el punto que está lo suficientemente cerca en la distancia horizontal del punto deseado, y solo entonces verificar la diferencia vertical? (me parece un poco exagerado)