Я моделирую объекты в прототипе игры в виде кругов. У каждого объекта есть масса, радиус, скорость и местоположение. Нет двух объектов с одинаковой массой и радиусом.
Я должен следовать коду, который должен вычислять упругое столкновение между ними, но я заметил, что результаты всегда такие, как если бы круги ударились друг о друга.
private void handleCollision(JumpObject a, JumpObject b) {
double newVelAX = (a.getVelocity().x * (a.getMass() - b.getMass()) + (2 * b.getMass() * b.getVelocity().x))
/ (a.getMass() + b.getMass());
double newVelAY = (a.getVelocity().y * (a.getMass() - b.getMass()) + (2 * b.getMass() * b.getVelocity().y))
/ (a.getMass() + b.getMass());
double newVelBX = (b.getVelocity().x * (b.getMass() - a.getMass()) + (2 * a.getMass() * a.getVelocity().x))
/ (a.getMass() + b.getMass());
double newVelBY = (b.getVelocity().y * (b.getMass() - a.getMass()) + (2 * a.getMass() * a.getVelocity().y))
/ (a.getMass() + b.getMass());
a.getVelocity().setLocation(newVelAX, newVelAY);
b.getVelocity().setLocation(newVelBX, newVelBY);
}
Мне нужно иметь дело со случаем, когда один из кругов попадает в другой под скользящим углом (я могу сделать диаграмму позже, если это необходимо), например, когда маленький круг едва задевает край большего круга, когда он проходит.
Как изменить алгоритм столкновения, чтобы учесть, где один круг касается другого?
Vector2D
для обработки некоторых математических операций. Я могу разобраться в векторной математике, но выполнение всех триггеров тоже меня запутало. 25.08.2013