Обнаружение столкновения окружности Java - PullRequest
2 голосов
/ 19 декабря 2011

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

public class Circle {
    private double radius;

    private double x;
    private double y;
}

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

PS Можете ли вы использовать метод, позволяющий избежатьквадратный корень?

Ответы [ 4 ]

7 голосов
/ 19 декабря 2011
double xDif = x1 - x2;
double yDif = y1 - y2;
double distanceSquared = xDif * xDif + yDif * yDif;
boolean collision = distanceSquared < (radius1 + radius2) * (radius1 + radius2);
4 голосов
/ 19 декабря 2011
dx = x2 - x1;
dy = y2 - y1;
radiusSum = radius1 + radius2;
return dx * dx + dy * dy <= radiusSum * radiusSum; // true if collision

Ссылка от @instanceofTom в комментариях лучше ... с картинками.

1 голос
/ 19 декабря 2011

Круги будут касаться, когда расстояние между их центрами равно сумме их радиусов, или сталкиваются, когда расстояние меньше.

Поскольку мы используем абсолютное расстояние, можно сравнить квадрат расстояния между центрами с квадратом суммы радиусов.

1 голос
/ 19 декабря 2011

Вот обновленное решение 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());
}
...