Fisica 2D: memorizzazione della posizione precedente rispetto alla velocità di memorizzazione


9

Ho visto una serie di tutorial e libri di giochi 2D in cui la posizione precedente di un oggetto era memorizzata nello stato anziché nel vettore di velocità. La velocità viene quindi calcolata in ciascun fotogramma come differenza tra le posizioni.

Quali sono i vantaggi di quel metodo?


2
Potresti collegarti ai tutorial in questione, per il contesto?
Anko,

Condivido la stessa curiosità di Anko
dnk drone.vs.drones

Questo tutorial menziona che si chiama integrazione Verlet. Ho trovato questo articolo , in cui sono spiegati i vantaggi di Verlet. Fondamentalmente, è più facile gestire collisioni e vincoli complessi.
Terzalo,

@Terzalo Vedi la versione aggiornata della mia risposta per vedere se aiuta a capire la logica generale dietro il caso specifico a portata di mano
MA

Risposte:


1

Senza conoscere esattamente i tutorial o i libri che hai letto, ecco cosa posso dirti.

Per essere più precisi in termini di definizione della fisica: la direzione del vettore viene calcolata come la differenza tra la posizione corrente e l'ultima posizione. La velocità del vettore è uguale a quella divisa per il tempo trascorso quando si passa da una posizione all'altra. Vedi: http://www.physicsclassroom.com/class/1DKin/Lesson-1/Speed-and-Velocity

Tuttavia, quando il tempo trascorso è considerato il generico "1 fotogramma", cioè dall'ultimo fotogramma alla corrente, allora la velocità del vettore e la direzione del vettore diventano le stesse. In pseudo-codice:

direction = current_position - past_position
elapsed_time = 1 frame
velocity = direction / elapsed_time

Quindi, in generale, il motivo principale per memorizzare la posizione nell'ultimo frame e ottenere la posizione nel frame corrente è che può essere l'unico modo o il modo più economico di conoscere la direzione aggiornata (e quindi la velocità aggiornata), cioè la direzione del movimento nel frame corrente.

Supponiamo di memorizzare la direzione (o anche la velocità) in un dato frame. Nel fotogramma successivo, l'unico modo per sapere se la direzione (o anche la velocità) era cambiata è se l'hai calcolata di nuovo. Il motivo è che la direzione precedente o la velocità precedente non ti consentono di conoscere la direzione o la velocità corrente nel caso in cui il movimento passasse da un fotogramma al successivo.

Ora, tenendo conto dei tutorial che hai citato nel commento alla tua domanda, diventa ancora più chiaro. In uno dei tutorial gli autori affermano che:

Ora, insegniamo alla nostra particella come muoversi con l'integrazione di Verlet. Questo è solo un modo elegante per dire che scopriremo quanto velocemente la nostra particella si sta muovendo confrontando la sua posizione questo frame con la sua posizione nell'ultimo frame. Perché? Perché ciò ci dà una velocità implicita - qualsiasi modifica alla posizione corrente della particella aggiornerà automaticamente la sua velocità

Quindi, come puoi vedere, la memorizzazione della posizione dell'ultimo fotogramma consente, come ho detto sopra, il calcolo aggiornato della velocità nel fotogramma corrente quando l'oggetto (nel tutorial è una particella) cambia posizione. Se hai salvato solo la direzione o la velocità nell'ultimo fotogramma, non saresti in grado di aggiornarlo facilmente nel caso in cui la posizione passasse dal fotogramma passato a quello corrente. Pertanto, come indicato anche nell'altro tutorial a cui si è collegati, il salvataggio della posizione precedente consente l'aggiornamento automatico della velocità quando le posizioni cambiano.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.