试图检查圆圈是否重叠,在第二个圆圈的内部或外部

时间:2012-12-12 03:22:48

标签: java

我有三种方法来检查一个圆是否在另一个圆内,一切都有效,除了交叉圆被标记为内部和相交的事实。我一直在阅读文章,但没有一个建议的选项似乎使它正常工作。以下是我的方法:

    public boolean isInside(Circle c2) {
    // get the distance between the two center points
    double distance = Math.sqrt((x - c2.x) * (x - c2.x) + (y - c2.y) * (y - c2.y));
    // check to see if we are inside the first circle, if so then return
    // true, otherwise return false.
    if (distance <= ((radius) + (c2.radius))) {
        System.out.println(distance);
        return true;
    } else {
        return false;
    }
}

public boolean isOutside(Circle c2) {
    double distance = Math.sqrt((x - c2.x) * (x - c2.x) + (y - c2.y) * (y - c2.y));
    if (distance > ((radius) + (c2.radius))) {
        System.out.println(distance);
        return true;
    } else {
        return false;
    }

}

public boolean isIntersecting(Circle c2) {
    double distance = Math.sqrt((x - c2.x) * (x - c2.x) + (y - c2.y) * (y - c2.y));
    if (Math.abs((radius - c2.radius)) <= distance && distance <= (radius + c2.radius)) {
        System.out.println(distance);
        return true;
    } else {
        return false;
    }
}

1 个答案:

答案 0 :(得分:4)

isInside()计算只是进行交叉测试。如果你想测试圆圈是否完全包围另一个圆圈,你需要测试两个圆圈之间的距离加上较小圆圈的半径是否小于较大圆圈的半径。

例如:

    public boolean isInside(Circle c2) {
        return distanceTo(c2) + radius() <= c2.radius();
    }