Question

Comment calculer la position d'un corps en accélération (une voiture, par exemple) après un certain temps (par exemple, 1 seconde)?

Pour un corps en mouvement qui n’accélère pas, c’est une relation linéaire; je suppose donc que pour un corps en accélération, il s'agit d’un carré quelque part.

Des idées?

Était-ce utile?

La solution

L'équation est la suivante: s = ut + (1/2) a t ^ 2

où s est la position, u est la vitesse à t = 0, t est le temps et a est une accélération constante.

Par exemple, si une voiture démarre à l'arrêt et accélère pendant deux secondes avec une accélération de 3 m / s ^ 2, elle se déplace (1/2) * 3 * 2 ^ 2 = 6 m

Cette équation provient de l'intégration analytique des équations indiquant que la vitesse est le taux de changement de position et l'accélération est le taux de changement de vitesse.

Habituellement, dans une situation de programmation de jeu, on utilise une formulation légèrement différente: à chaque image, les variables de vitesse et de position sont intégrées de manière non analytique mais numérique:

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

où dt est la longueur d'une image (mesurée à l'aide d'une minuterie: environ 1 / 60ème seconde). Cette méthode présente l'avantage que l'accélération peut varier dans le temps.

Modifier Plusieurs personnes ont noté que la méthode d'intégration numérique d'Euler (présentée ci-dessous), bien que la plus simple à démontrer, présente une précision relativement médiocre. Voir Velocity Verlet (souvent utilisé dans les jeux) et Runge Kutta 4ème ordre (méthode" standard "pour les applications scientifiques) pour de meilleurs algorithmes.

Autres conseils

Cela dépend si l'accélération est constante ou non. Si c'est le cas, c'est tout simplement

s = ut+1/2 at^2

Si a n'est pas constant, vous devez l'intégrer numériquement. Maintenant, il existe une variété de méthodes et aucune d’entre elles ne le fera à la main pour des raisons de précision, car ce sont finalement des solutions approximatives.

La méthode d'Euler est la plus simple et la moins précise. Ici, vous divisez le temps en morceaux distincts appelés pas de temps et effectuez

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

n est un index, t est la taille d'un pas de temps. La position est mise à jour de manière similaire. Ceci n’est vraiment utile que dans les cas où la précision n’est pas très importante. Une version spéciale de la méthode d'Euler fournira une solution exacte pour le mouvement du projectile (voir le wiki). Ainsi, même si cette méthode est grossière, elle peut être parfaite pour certaines suituations.

La méthode d'intégration numérique la plus utilisée dans les jeux et dans certaines simulations de chimie est la Velocity Verlet , qui est une forme spéciale de la méthode Verlet plus générique. Je recommanderais celui-ci si Euler est trop brut.

Vous pouvez le google. J'ai trouvé ceci: http: // www. ugrad.math.ubc.ca/coursedoc/math101/notes/applications/velocity.html

Mais si vous ne voulez pas lire, c'est:

  

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

  • p (t) = position à l'instant t
  • x (0) = la position à l'instant zéro
  • v (0) = vitesse au temps zéro (si vous n'avez pas de vitesse, vous pouvez ignorer ce terme)
  • a = l'accélération
  • t = votre nom actuel

En supposant que vous traitez avec une accélération constante, la formule est la suivante:

distance = (initial_velocity * time) + (accélération * time * time) / 2

distance est la distance parcourue

initial_velocity est la vitesse initiale (zéro si le corps est au repos, vous pouvez donc supprimer ce terme dans ce cas)

heure est l'heure

accélération est l'accélération (constante)

Assurez-vous d’utiliser les unités appropriées lors du calcul, c’est-à-dire les mètres, les secondes, etc.

.

Un Physics for Game Developers est un excellent livre sur le sujet.

En supposant une accélération constante et la vitesse initiale v0,

x(t) = (1/2 * a * t^2) + (v0 * t)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top