Мне нужно самое простое решение для разрешения 2D упругого столкновения между кругами, каждый круг имеет равную массу с остальными.
Среда - это холст Android, в котором ось Y растет вниз.Логическим представлением круга является класс PlayerBall , который успешно обнаружил столкновение.В PlayerBall есть поля:
x и y положение центра круга
velX и velY вектор скорости движения круга представлен двумя скалярными значениями, которые могут быть положительными или отрицательными.
диаметр - диаметр круга
public static void resolveCollision(PlayerBall ballOne, PlayerBall ballTwo)
{
double collisionAngle = Math.atan2(ballTwo.y - ballOne.y, ballTwo.x - ballOne.x); // angle for ball one
// calculating new velocities between ballOne and ballTwo
...
// setting the new velocities for both balls
ballOne.setVelocity((float)ballOneVelX, (float)ballOneVelY);
ballTwo.setVelocity((float)ballTwoVelX, (float)ballwTwoVelY);
}
Я ожидаючто скорости шариков меняются по формуле, определенной в этой статье https://en.wikipedia.org/wiki/Elastic_collision#Two-dimensional_collision_with_two_moving_objects