Quelle est la différence entre une application d'une impulsion et une application d'une force par rapport à un moteur physique?
25
Une impulsion est appliquée instantanément, elle ne dépend donc pas du pas de temps. Vous utiliseriez une impulsion lorsque vous souhaitez donner un coup de pouce fixe à quelque chose, ou l'action physique se produit trop rapidement (ex. Balles / ricochet de canon, collisions, sauts, accélérations instantanées).
Pendant ce temps, une force modifie la vitesse directement proportionnelle au pas de temps. Vous l'utilisez pour des choses qui ont un effet dans le temps (ex. Gravité, longs ressorts, résistance à l'air).
Mathématiquement impulse = force * time
; Et pour référence impulse = mass * velocity_change
, force = mass * acceleration
.
Si vous développez le premier, vous pouvez vérifier ceci:
impulse = force * time
->impulse = mass * acceleration * time
et depuis acceleration * time = velocity_change
->impulse = mass * velocity_change
.
impulse = force * time
, l'impulsion dépend également du temps (au moins si vous utilisez des forces pour obtenir l'amplitude de l'impulsion). En effet, l'élan ou l'impulsion est utile pour appliquer des changements dramatiques instantanés. L'exemple le plus populaire provient des lois de conservation de la quantité de mouvement et de l'énergie: physics.ohio-state.edu/~gan/teaching/spring99/C10.pdf .Jeff Lake
via est doncGame Coding Complete 3rd Ed. Chapter 15: Collision and Simple Physics
incorrecte: (paraphrase)Start with a Vector3d (or 2d depending) of forces F, Accumulate all Forces applied in a list, Accumulate All Impulses in a list add both totals to Forces, empty Impulses list, Accel = F / mass, Vel += Accel * deltaTime, Pos = Vel * time.
i = F_response * DTime
. Vous pouvez aller dans les deux sens: utilisez l'i
impulsion pour corriger les vitesses après la collision, ou utilisez directement la force de réponse. Si vous obtenez l'impulsion d'un autre endroit, vous pouvez le convertir en unF_response
et cela fonctionne bien.