Sto realizzando un AI rudimentale per il mio scroller laterale e ho bisogno di sapere se un'unità AI può raggiungere il punto B dal punto A semplicemente facendo un salto.
La traiettoria di volo dei miei personaggi è un po 'insolita in quanto possono applicare la forza a mezz'aria (come ad esempio in Jazz Jackrabbit 2), quindi a differenza della classica traiettoria di un proiettile che riguarda ...
percorso che un proiettile lanciato o lanciato prenderà (...) senza propulsione.
... Suppongo che il mio problema riguardi più un proiettile con propulsione (es. Razzo).
Per illustrare questo, ecco come appare la curva di volo per il mio personaggio se salto e premo continuamente il "pulsante sinistro" (sembra diverso all'estremità sinistra, qui è dove stavo realizzando alcuni manuevers a mezz'aria):
La forza applicata durante il volo è sempre parallela all'asse X, quindi è F = (-f, 0) se tengo "sinistra" ed è F = (f, 0) se tengo "destra".
Può muoversi molto come un maglione da sci:
Quindi differisce molto dalla traiettoria classica che è semplicemente una parabola (fonte: wikipedia ):
Per renderlo più difficile, sto simulando una semplice resistenza all'aria in modo che i miei personaggi possano accelerare solo fino a un valore di velocità massima.
Questo viene fatto applicando una piccola forza nella direzione opposta del viaggio :
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 è una costante che nel mio caso è pari a 0,1.
Supponiamo che il mio personaggio sia un punto infinitamente piccolo.
E NON sto prendendo in considerazione gli ostacoli, quindi la mia domanda va così ...
Come determinare (almeno in modo attendibile indovinare), data la velocità iniziale V, un impulso J = (0, -j) che applico al personaggio al salto, gravità G = (0, g) , forza F = (+ -f , 0) continuamente applicato durante il volo e AIR_RESISTANCE_MULT se decidiamo davvero di prendere in considerazione la resistenza dell'aria (questo è facoltativo) , se un punto si trova sotto la curva tracciata dal percorso che il mio personaggio prenderà?
Non ho letteralmente idea da dove cominciare con i calcoli e in effetti non sono necessariamente interessato a una risposta esatta; un hack / approssimazione ben funzionante sarebbe ottimo in quanto l'IA non deve assolutamente agire perfettamente.
modifica: ho deciso di risolvere questo problema usando la simulazione come suggerisce Jason, ma come gestire un caso del genere?
Devo disegnare un segmento da C a D e verificare se il punto desiderato si trova al di sotto di questo segmento?
O dovrei cercare binariamente i timestep tra C e D per cercare il punto che è abbastanza vicino in distanza orizzontale al punto desiderato, e solo allora controllare la differenza verticale? (mi sembra un po 'eccessivo)