Вот класс круга:
public class Circle { private double radius; private double x; private double y; }
Как определить, сталкиваются ли два объекта из этого класса (круги)?
PS Можете ли вы использовать метод, позволяющий избежатьквадратный корень?
double xDif = x1 - x2; double yDif = y1 - y2; double distanceSquared = xDif * xDif + yDif * yDif; boolean collision = distanceSquared < (radius1 + radius2) * (radius1 + radius2);
dx = x2 - x1; dy = y2 - y1; radiusSum = radius1 + radius2; return dx * dx + dy * dy <= radiusSum * radiusSum; // true if collision
Ссылка от @instanceofTom в комментариях лучше ... с картинками.
Круги будут касаться, когда расстояние между их центрами равно сумме их радиусов, или сталкиваются, когда расстояние меньше.
Поскольку мы используем абсолютное расстояние, можно сравнить квадрат расстояния между центрами с квадратом суммы радиусов.
Вот обновленное решение Java:
public boolean hasCollision(Circle circle){ double xDiff = x - circle.getX(); double yDiff = y - circle.getY; double distance = Math.sqrt((Math.pow(xDiff, 2) + Math.pow(yDiff, 2))); return distance < (radius + circle.getRadius()); }