Обычно в Canvas, когда что-то волшебным образом исчезает, это может быть связано с тем, что данные, переданные на холст, больше не действительны.
Если вы укажете данные кругов для отладки, вы увидите, что и "x", и "vx" теперь равны NaN.
Продолжайте возвращать эту ошибку, и вы обнаружите, что NaN происходит от этой строки кода, которая содержит опечатку.
newVx1 =
(circles[i].vx * (circles[i].mass - circles[an].mass) +
2 * circles[i].mass[an] * circles[i].vx) /
(circles[i].mass + circles[an].mass);
Видите круги [м] .Масс [ан]? Это приведет к неопределенности, которая затем приведет к NaN.
Ваше столкновение все еще ведет себя странно, но, по крайней мере, теперь оно не исчезает. Пример