Как устранить совпадение кругов в реакции на столкновение?

Так как в цифровом мире реальное столкновение почти никогда не происходит, у нас всегда будет ситуация, когда "сталкивающиеся" шары перекрываются.

Как вернуть шары в ситуации, когда они отлично сталкиваются без перекрытия?

Я бы решил эту проблему с апостериорный подход (в двух измерениях).

Короче, я должен решить это уравнение для t:

((x2 - t * v.x2) - (x1 - t * v.x1))^2 + ((y2 - t * v.y2) - (y1 - t * v.y1))^2 = (r1 + r2)^2

Где:

  • t - это номер, который отвечает на вопрос: сколько кадров назад произошло ли столкновение?
  • (x1, y1) - центр первого шара
  • (x2, y2) - центр второго шара
  • (v.x1, v.y1) и (v.x2, v.y2) - их скорости.

но решение от WolframAlpha слишком сложно (я изменил название скоростей, но по существу ничего не менял).

Ответ 1

Это выглядит сложным, потому что это полное решение, а не просто упрощенная полиномиальная форма. Умножьте все и соберете константы, t и t ^ 2, и вы обнаружите, что он становится только при ^ 2 + bt + c = 0. Оттуда вы можете просто использовать квадратичную формулу.

Кроме того, если вы хотите, чтобы все было просто, сделайте их с помощью векторной математики. Здесь нет причин отделять координаты x и y; векторное дополнение и точечные продукты - все, что вам нужно.

Наконец, все, что имеет значение, - это относительное положение и относительная скорость. Притворите, что один круг находится в начале и в неподвижном положении, и применяет разницу к другому шару. Это не меняет ответа, но оно уменьшает количество переменных, которые вы перепутаете.