如何检测一个新圆与另一个已经在 for 循环中创建的圆的碰撞?

How can I detect a collision of a new circle with another circle already created in a for-loop?

我正在我的构造函数中创建 25 个圆圈,并希望在这个圆圈创建部分进行碰撞检测,这样圆圈就不会发生碰撞。碰撞检测已经开始工作,但我没有将其纳入我的圆圈创建部分。

这是我要创建 25 个圆圈的构造函数:

public Drawing(Context context) {
        super(context);
        this.ctx = context;

        viking = new Circle(160,160, 33, "viking", "green", false);

        for(int k = 0; k < circles.length; k++) {
            int randomX = r.nextInt(500);
            int randomY = r.nextInt(750);
            circles[k] = new Circle(randomX, randomY, 33, "Circle"+k, "blue", false);
            circles[k].setX(randomX);
            circles[k].setY(randomY);
            setDrawColor(circles[k]);
            //Collision Detection
             for(int z = 0; z<k;z++) {
                 if(detectCollision(circles[k], circles[z]) == true)
                 {
                     break;
                 }
             }
        }

        pMe.setColor(Color.GREEN);
        p1.setColor(Color.GREEN);
        p2.setColor(Color.BLUE);
        p3.setColor(Color.RED);
    }

碰撞检测如下所示:

    public static boolean detectCollision(Circle c1, Circle circleOpponent) {
        dx = circleOpponent.getX() - c1.getX();
        dy = circleOpponent.getY() - c1.getY();
        radiusSum = circleOpponent.getR() + c1.getR();
        return dx * dx + dy * dy <= radiusSum * radiusSum; // true if collision
    }

"new Circle" 中的值是 x 和 y 位置、半径、名称、颜色和 isDrawn 值。

有谁知道我必须在 for 循环中更正或调整什么?

感谢帮助!

我假设在检测到碰撞的情况下,您想忽略新创建的圆圈并继续创建圆圈,直到达到 25 个圆圈。因此,您的最外层循环应该是一个 while 循环。此外,当您发现它不与任何现有圆圈碰撞时,您应该只将圆圈添加到数组中。从而引入一个候选变量。使用continue语句进入外循环的下一次迭代。

int createdCircles = 0;
outer: while (createdCircles < 25) {
    Circle candidate = new Circle(...);
    inner: for (int z = 0; ...) {
        if (detectCollision(...)) continue outer;
    }
    circles[createdCircles] = candidate;
    createdCircles++;
}