如何修复此代码以正确检测重叠的圆?
通过测试起点的位置来指定第一个圆。该第一个圆应该是重叠圆图的基础。现在,仅当被测圆在非分支线中重叠时才有效...

(单个圆圈为[x,y,radius])

var circles = [
    [6, 19, 1],
    [6, 11, 4],
    [8, 17, 3],
    [19, 19, 2],
    [19, 11, 4],
    [15, 7, 6],
    [12, 19, 4]
];
var i = 0;
var j = 0;
var start = [10, 19];
var starts = false;
var overlapping = [];

var isInside = function(point, list, check, push) {
    var temp = list.filter(function(item) { return Math.pow(item[0] - point[0], 2) + Math.pow(item[1] - point[1], 2) < item[2] * item[2] });
    if (push) { overlapping = overlapping.concat(temp) };
    return temp.length > 0
};

starts = isInside(start, circles, starts, true);

var overlappingCirclesTest = function() {
    if (j < circles.length && overlapping.length > 0) {
        var i = overlapping.length - 1;
        var r0 = overlapping[i][2];
        var r1 = circles[j][2];
        var x0 = overlapping[i][0];
        var x1 = circles[j][0];
        var y0 = overlapping[i][1];
        var y1 = circles[j][1];
        if (Math.hypot(x0 - x1, y0 - y1) <= (r0 + r1)) {
            overlapping.push(circles[j]);
            circles.splice(circles.indexOf(circles[j]), 1);
            j = 0;
            overlappingCirclesTest();
        }
        j++;
        overlappingCirclesTest();
    }
}
overlappingCirclesTest();


编辑:为澄清起见:我们有一个可能重叠的圆和两个点的数组,起点和终点。我们想要产生一条重叠的圆的路径,从一个以start开始的圆到一个以end结尾的圆结束。可能有几种潜在的路径,我们只想知道是否有任何路径。

最佳答案

因此,这是一个非常基本的碰撞检查系统。每当您更新时,运行Collision并传递要检查碰撞的圆的参数。

function Collision (x, y, r) {
    for (i=0; i<circles.length; i++) {
        //Distance formula
        if (Math.sqrt((x-circles[i].x)(x-circles[i].x) + (y-circles[i].y)(y-circles[i].y) < r) {
            return true;
    }
}


这是一个圆对象的示例,以及如何调用它:

function Circle() {
    this.x = Math.random()*100;
    this.y = Math.random()*100;
    this.r = Math.random()*50;

    this.update = function() {
        if (Collision(this.x, this.y, this.r) {
          console.log("circle collided with another circle");
        }
    }
};


此外,您可以检出我创建的项目的来源,该项目使用了很多圆圈,并检查了所有圆圈和播放器之间的碰撞。 http://betaio.bitballoon.com

08-27 22:25
查看更多