Java Circle-Обнаружение Столкновений По Кругу


Вот класс круга:

public class Circle {
    private double radius;

    private double x;
    private double y;
}

Как я могу сказать, сталкиваются ли два объекта из этого класса (круги)?

P. S. Может вы используете метод, который избегает принятия квадратного корня?

4 2

4 ответа:

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());
}