Quelle est la différence entre une impulsion et une force liée à un moteur physique?

25

Quelle est la différence entre une application d'une impulsion et une application d'une force par rapport à un moteur physique?

Casey
la source

Réponses:

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 * timeet depuis acceleration * time = velocity_change->
  • impulse = mass * velocity_change.
csiz
la source
1
Depuis 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 .
teodron
L'implémentation par Jeff Lakevia est donc Game Coding Complete 3rd Ed. Chapter 15: Collision and Simple Physicsincorrecte: (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.
Casey
@Casey: c'est comme ça que je le fais. Dans mon simulateur, je ne peux pas utiliser le boîtier rigide où deux corps entrent en collision et tout fonctionne directement. Suivre la manière newtonienne d'intégrer l'accélération pour trouver la vitesse puis la position. Mes impulsions proviennent d'une force de répulsion (réponse / force de réaction est synonyme dans ma compréhension): i = F_response * DTime. Vous pouvez aller dans les deux sens: utilisez l' iimpulsion 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 un F_responseet cela fonctionne bien.
teodron
@teodron Merci, cela soulève une question distincte que je vais poser ... séparément. : P
Casey