В чем разница между импульсом и силой, связанной с физическим двигателем?

25

В чем разница между приложением импульса и применением силы по отношению к физическому движку?

Casey
источник

Ответы:

25

Импульс применяется мгновенно, поэтому он не зависит от временного шага. Вы будете использовать импульс, если хотите что-то зафиксировать в скорости, или если физическое действие происходит слишком быстро (например, пули / рикошет оружия, столкновения, прыжки, мгновенное повышение скорости).

Между тем сила изменяет скорость прямо пропорционально шагу времени. Вы используете его для вещей, которые имеют эффект со временем (например, гравитация, длинные пружины, сопротивление воздуха).

Математически impulse = force * time; И для справки impulse = mass * velocity_change, force = mass * acceleration.

Если вы развернете первое, вы можете проверить это:

  • impulse = force * time ->
  • impulse = mass * acceleration * timeи с тех пор acceleration * time = velocity_change->
  • impulse = mass * velocity_change,
csiz
источник
1
Поскольку impulse = force * timeимпульс также зависит от времени (по крайней мере, если вы используете силы, чтобы получить величину импульса). Действительно, импульс или импульс полезен для применения мгновенных драматических изменений. Наиболее популярным примером являются законы сохранения импульса и энергии: физика . Ohio-state.edu/~gan/teaching/spring99/C10.pdf .
Теодрон
Так что реализация с Jeff Lakeпомощью Game Coding Complete 3rd Ed. Chapter 15: Collision and Simple Physicsневерно: (перефразируя)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: так я это делаю. В моем симуляторе я не могу использовать случай с твердым телом, где два тела сталкиваются, и все работает напрямую. Следуя ньютоновскому способу интегрирования ускорения, нужно найти скорость, а затем положение. Мои импульсы являются производными от силы отталкивания (ответ / сила реакции является синонимом в моем понимании): i = F_response * DTime. Вы можете пойти любым путем: использовать iимпульс, чтобы скорректировать скорости после столкновения, или использовать непосредственно силу отклика. Если вы получаете импульс откуда-то еще, вы можете преобразовать его в F_responseи он работает нормально.
Теодрон
@teodron Спасибо, это поднимает отдельный вопрос, который я задам ... отдельно. : P
Кейси