获得两个圆圈的重叠区域

时间:2014-12-16 16:52:02

标签: android geometry collision-detection

我对我正在进行的咨询项目的最后一刻要求非常紧张。

基本上这就是我想要实现的目标:

我有一个绘制一系列随机大小圆圈的表面视图。每个圆的半径可以为50-100。

随机生成x,y值以及随机半径

每个圆都被创建为表示该圆(x,y坐标和半径)的对象,并将其添加到列表中。

一旦创建完毕,就会被绘制出来。

问题是我想确保这些圈子都不重叠。

我有点挣扎。这似乎不应该那么困难,但不幸的是,这对我来说。

到目前为止,这是我的代码(我知道它并不紧密......善待):

    x = 100 + (int) (Math.random() * (mCanvasWidth - 200));
    y = 100 + (int) (Math.random() * (mCanvasHeight - 200));
    radius = 50 + (int) (Math.random() * 99);
    color[0] = (float) (Math.random() * 360);
    color[1] = 1;
    color[2] = 1;

    String radVal = String.valueOf(radius);

    circle circ = new circle(x, y, radius, Color.HSVToColor(128, color), radVal);

    boolean addit = true;



    for (dot d : Dots) {
        int leftSide = d.get_x() - radius;
        int rightSide = d.get_x() + radius;

        int xBoundary = x + radius;
        int yBoundary = y + radius;

        int exist_xLeft = d.get_x() - d.get_radius();
        int exist_xRight = d.get_x() + d.get_radius();
        int exist_yTop = d.get_y() - d.get_radius();
        int exist_yBottom = d.get_y() + d.get_radius();

        if ((xBoundary > exist_xLeft) && (xBoundary < exist_xRight))
        {
            if (yBoundary > (exist_yTop) && (yBoundary < exist_yBottom)) {
                addit = false;
                break;
            }
        }
    }

    if (addit)
        circles.add(mdot);

    if (circles.size() >= 5)
        running = false;

然后它迭代圆圈列表并将它们绘制到画布上。

有关我在碰撞检测中失败的建议吗?

1 个答案:

答案 0 :(得分:0)

您可以检测2个圆圈是否像这样发生碰撞:

假设:

  • 中心点cx1,cy1&amp; cx2,cy2

  • 并给出半径r1&amp; r2,

然后您可以确定2个圆圈是否发生碰撞:

areColliding=((cx2-cx1)*(cx2-cx1)+(cy2-cy1)*(cy2-cy1))<((r1+r2)*(r1+r2));