Conner Ruhl
Conner Ruhl

Reputation: 1723

Java Circle-Circle Collision Detection

Here is the circle class:

public class Circle {
    private double radius;

    private double x;
    private double y;
}

How can I tell if two objects from this class (circles) are colliding?

P.S. Can you use the method that avoids taking a square root?

Upvotes: 3

Views: 15977

Answers (4)

Briguy37
Briguy37

Reputation: 8402

Here's the updated Java solution:

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

Upvotes: 1

Hot Licks
Hot Licks

Reputation: 47699

double xDif = x1 - x2;
double yDif = y1 - y2;
double distanceSquared = xDif * xDif + yDif * yDif;
boolean collision = distanceSquared < (radius1 + radius2) * (radius1 + radius2);

Upvotes: 9

Pete Kirkham
Pete Kirkham

Reputation: 49311

The circles will touch when the distance between their centres is equal to the sum of their radii, or collide when the distance is less.

Since we are using absolute distance, it is Ok to compare the square of the distance between centres with the square of the sum of the radii.

Upvotes: 1

toto2
toto2

Reputation: 5326

dx = x2 - x1;
dy = y2 - y1;
radiusSum = radius1 + radius2;
return dx * dx + dy * dy <= radiusSum * radiusSum; // true if collision

The link from @instanceofTom in the comments is better... with pictures.

Upvotes: 4

Related Questions