Я использую стандартный Box2D ContactListener
для прослушивания событий столкновения. Я хочу рассчитать силу удара при столкновении тел.
Я читал много разных описаний того, как люди его вычисляют. Некоторые используют обратный вызов preSolve
, другие используют postSolve
. Некоторые используют Manifold
, другие ContactImpulse
. Некоторые берут только normalImpulse+tangentImpulse первой точки, другие берут сумму всех точек, а третьи, опять же, берут максимум. Некоторые люди полностью игнорируют TangentImpulses...
Я не могу понять эту проблему. Иногда я получаю только импульсы в postSolve
, а импульсов в preSolve
всего 0. Иногда бывает наоборот. Иногда я получаю смехотворно высокие значения (скажем, от 1E15 до 1E30), а иногда они смехотворно низкие (скажем, от -1E15 до -1E30). У меня даже был случай, когда один из импульсов был NaN
(Не Число).
Есть ли кто-нибудь, кто может объяснить мне, как решить эту проблему и, возможно, объяснить, как интерпретировать эти импульсы? Или, может быть, покажите мне какую-нибудь игру с открытым исходным кодом, в которой используется Box2D, а также необходимо рассчитать влияние для любой системы повреждений?