Java圆 - 圆碰撞检测

时间:2011-12-19 19:22:54

标签: java collision-detection

这是圆圈类:

public class Circle {
    private double radius;

    private double x;
    private double y;
}

如何判断此类(圆圈)中的两个对象是否发生碰撞?

P.S。你能使用避免取平方根的方法吗?

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:4)

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

评论中来自@instanceofTom的链接更好......带图片。

答案 2 :(得分:1)

这是更新的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());
}

答案 3 :(得分:1)

当圆心之间的距离等于半径之和时,圆会触碰,或者当距离较小时,圆会碰撞。

由于我们使用绝对距离,所以可以比较中心之间距离的平方与半径之和的平方。