Domanda

Come posso calcolare la posizione di un corpo in accelerazione (ad es. un'automobile) dopo un certo tempo (ad es. 1 secondo)?

Per un corpo in movimento che non accelera, è una relazione lineare, quindi presumo che per un corpo in accelerazione implichi un quadrato da qualche parte.

Qualche idea?

È stato utile?

Soluzione

L'equazione è: s = ut + (1/2) a t ^ 2

dove s è posizione, u è velocità a t = 0, t è tempo e a è un'accelerazione costante.

Ad esempio, se un'auto inizia stazionaria e accelera per due secondi con un'accelerazione di 3m / s ^ 2, si sposta (1/2) * 3 * 2 ^ 2 = 6m

Questa equazione deriva dall'integrare analiticamente le equazioni affermando che la velocità è la velocità di variazione della posizione e l'accelerazione è la velocità di variazione della velocità.

Di solito in una situazione di programmazione del gioco, si usa una formulazione leggermente diversa: in ogni frame, le variabili per velocità e posizione sono integrate non analiticamente, ma numericamente:

s = s + u * dt;
u = u + a * dt;

dove dt è la lunghezza di un fotogramma (misurato usando un timer: 1/60 di secondo circa). Questo metodo ha il vantaggio che l'accelerazione può variare nel tempo.

Modifica Un paio di persone hanno notato che il metodo di integrazione numerica di Eulero (come mostrato qui), sebbene il più semplice da dimostrare, abbia una precisione piuttosto scarsa. Vedi Velocity Verlet (spesso utilizzato nei giochi) e Runge Kutta del 4 ° ordine (un metodo" standard "per applicazioni scientifiche) per algoritmi migliorati.

Altri suggerimenti

Bene, dipende se l'accelerazione è costante o meno. Se lo è è semplicemente

s = ut+1/2 at^2

Se a non è costante, è necessario integrare numericamente. Ora esiste una varietà di metodi e nessuno di loro batterà facendo questo a mano per accuratezza, poiché sono tutte soluzioni in definitiva approssimative.

Il più semplice e meno preciso è Metodo di Eulero . Qui dividi il tempo in blocchi discreti chiamati passi del tempo ed esegui

v[n] = v[n-1] * t * a[t]

n è indice, t è la dimensione di un passaggio temporale. La posizione viene aggiornata in modo simile. Questo è davvero buono solo per quei casi in cui la precisione non è poi così importante. Una versione speciale del metodo di Euler produrrà una soluzione esatta per il movimento dei proiettili (vedi wiki), quindi mentre questo metodo è rozzo, può essere perfetto per alcune supposizioni.

Il metodo di integrazione numerica più comune utilizzato nei giochi e in alcune simulazioni chimiche è Velocity Verlet , che è una forma speciale del metodo Verlet più generico. Consiglierei questo se Euler è troppo rozzo.

Puoi cercarlo su Google. Ho trovato questo: http: // www. ugrad.math.ubc.ca/coursedoc/math101/notes/applications/velocity.html

Ma se non vuoi leggere, è:

  

p (t) = x (0) + v (0) * t + (1/2) a t ^ 2

dove

  • p (t) = posizione al momento t
  • x (0) = la posizione al tempo zero
  • v (0) = velocità al tempo zero (se non hai una velocità, puoi ignorare questo termine)
  • a = l'accelerazione
  • t = il tuo attuale it

Supponendo che tu abbia a che fare con un'accelerazione costante, la formula è:

distance = (initial_velocity * time) + (acceleration * time * time) / 2

dove

distanza è la distanza percorsa

initial_velocity è la velocità iniziale (zero se il corpo è a riposo, quindi in questo caso è possibile eliminare questo termine)

ora è l'ora

accelerazione è l'accelerazione (costante)

Assicurati di usare le unità appropriate durante il calcolo, ovvero metri, secondi e così via.

Un ottimo libro sull'argomento è Physics for Game Developers .

Supponendo l'accelerazione costante e la velocità iniziale v0,

x(t) = (1/2 * a * t^2) + (v0 * t)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top