В настоящее время я делаю 2D-игру для бильярда, в которой мне нужно использовать симулятор реальной физики. До сих пор я делал круговые столкновения и упругие столкновения, но мне нужна формула, которая может найти скорость реакции на столкновение, которая отличается, когда мяч сталкивается с другим в различных точках заранее.
Есть много подходов, но если вы можете позволить себе немного перекрывать шары (то есть, чтобы одна часть шара «входила» в другую), вы можете превратить ее в систему с пружинным амортизатором и решить с помощью Закон Гука.
Поскольку закон Гука дает вам силу, вам нужно интегрировать ее, чтобы найти импульс. Импульс, деленный на массу, — это скорость, которую вы ищете.
Взгляни на этот отличное введение в весеннюю физику для разработки игр (здесь также есть ссылка на его введение по численной интеграции).
редактировать: если вы ищете практическое решение, я предлагаю Box2D физический движок.
Столкновение пула можно рассматривать как упругое столкновение по всей доске, при этом трение замедляет его движение.
Не думайте, что реакция на столкновение выражена в углах к окружности. Использование векторов облегчит проблему.
Реакция скорости столкновения окружности на окружность проста:
1. При обнаружении столкновения
2. Найдите нормальную скорость шариков, действующих по направлению к другому шарику.
3. Поменяйте местами нормальную скорость между двумя шариками
4. Разрешить скорость в направлении х и у
Очень полезный веб-сайт, чтобы найти реакцию на скорость в терминах векторов: http://archive.ncsa.illinois.edu/Classes/MATH198/townsend/math.html