У меня есть массив частиц, которые являются объектами класса, и я пытаюсь запрограммировать эластичные c столкновения между любыми частицами, когда они сталкиваются. Мне удалось заставить его работать только с двумя жестко закодированными, но, похоже, он не работает с использованием a для l oop:
for _p1 in _particles:
for _p2 in _particles:
if _p1 != _p2:
_p1_x, _p1_y = _p1.get_pos()
_p2_x, _p2_y = _p2.get_pos()
_distance = ((_p2_x - _p1_x) ** 2 + (_p2_y - _p1_y) ** 2) ** 0.5
if _distance <= abs(_p1.get_radius() + _p2.get_radius()):
_u1x, _u1y = _p1.get_velocity()
_u2x, _u2y = _p2.get_velocity()
_m1 = _p1.get_mass()
_m2 = _p2.get_mass()
# Calculate the final velocities
_v1x = _u1x * (_m1 - _m2) / (_m1 + _m2) + 2 * _u2x * _m2 / (
_m1 + _m2)
_v2x = 2 * _u1x * _m1 / (_m1 + _m2) - _u2x * (_m1 - _m2) / (_m1 + _m2)
# Apply the new velocity in the x plane
_p1.set_velocity(_v1x, _u1y)
_p2.set_velocity(_v2x, _u2y)
Частицы просто проходят друг через друга. Моя теория состоит в том, что частицы, переключающиеся в следующем oop, отменяют изменение скорости net, следовательно, их пути остаются неизменными. Любые предложения, как это исправить?