Physique 2D: stockage de la position précédente vs stockage de la vitesse


9

J'ai vu un certain nombre de tutoriels et de livres sur le jeu 2D où la position précédente d'un objet était stockée dans un état au lieu d'un vecteur de vitesse. La vitesse est ensuite calculée pour chaque image comme une différence entre les positions.

Quels sont les avantages de cette méthode?


2
Pourriez-vous créer un lien vers les didacticiels en question, pour le contexte?
Anko

Je partage la même curiosité d'Anko
dnk drone.vs.drones

Ce didacticiel mentionne qu'il s'agit de l'intégration Verlet. J'ai trouvé cet article , dans lequel les avantages de Verlet sont expliqués. Fondamentalement, il est plus facile de gérer les collisions et les contraintes complexes.
Terzalo

@Terzalo Voir la version mise à jour de ma réponse pour voir si elle aide à comprendre la logique générale le cas spécifique à portée de main
Mand

Réponses:


1

Sans connaître exactement les tutoriels ou livres que vous avez lus, voici ce que je peux vous dire.

Pour être plus précis en termes de définition physique: la direction du vecteur est calculée comme la différence entre la position actuelle et la dernière position. La vitesse du vecteur est égale à celle divisée par le temps écoulé lors du passage d'une position à l'autre. Voir: http://www.physicsclassroom.com/class/1DKin/Lesson-1/Speed-and-Velocity

Cependant, lorsque le temps écoulé est considéré comme la "1 image" générique, c'est-à-dire de la dernière image au courant, alors la vitesse du vecteur et la direction du vecteur deviennent les mêmes. En pseudo-code:

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

Donc, en général, la principale raison pour stocker la position dans la dernière image et obtenir la position dans l'image actuelle est que cela peut être soit le seul moyen soit le moyen le moins cher de connaître la direction mise à jour (et donc la vitesse mise à jour), c'est-à-dire la direction du mouvement dans l'image courante.

Supposons que vous stockiez la direction (ou même la vitesse) dans une image donnée. Dans l'image suivante, la seule façon de savoir si la direction (ou même la vitesse) a changé est de la recalculer. La raison étant que la direction précédente ou la vitesse précédente ne vous permettent pas de connaître la direction actuelle ou la vitesse actuelle au cas où le mouvement changerait d'une image à la suivante.

Maintenant, en tenant compte des tutoriels que vous avez mentionnés dans le commentaire de votre propre question, cela devient encore plus clair. Dans l'un des tutoriels, les auteurs disent que:

Maintenant, apprenons à notre particule comment se déplacer avec l'intégration de Verlet. C'est juste une façon élégante de dire que nous allons découvrir la vitesse à laquelle notre particule se déplace en comparant sa position cette image à sa position la dernière image. Pourquoi? Parce que cela nous donne une vitesse implicite - tout changement de la position actuelle de la particule mettra automatiquement à jour sa vitesse

Ainsi, comme vous pouvez le voir, le stockage de la position de la dernière image permet, comme je l'ai dit ci-dessus, le calcul mis à jour de la vitesse dans l'image actuelle lorsque l'objet (dans le tutoriel, c'est une particule) change de position. Si vous n'avez enregistré que la direction ou la vélocité dans la dernière image, vous ne pourrez pas la mettre à jour aussi facilement si la position passe de l'image précédente à l'image actuelle. Par conséquent, comme indiqué également dans l'autre didacticiel auquel vous avez lié, l'enregistrement de la position précédente permet une mise à jour automatique de la vitesse lorsque les positions changent.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.