如何修复此代码以正确检测重叠的圆圈? 第一个圆圈是通过测试起点的位置来指定的。这第一个圆应该是重叠圆图的基础。现在,如果测试圈在非分支线重叠,它只能......javascript:在阵列中找到重叠的圆圈
(个人圈来为[X,Y,半径])
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();
编辑:澄清:我们有一组可能重叠的圆圈和两个点,开始和结束。我们想要产生一个重叠圆的路径,从开始的一个开始,到结束的一个结束。可能有几条潜在路径,我们只想知道是否有任何路径。
您是指相互重叠的圆或重叠起点的圆? –
重叠对方,但开始重叠的第一个圆圈是其中的起点。请注意,可以有多于一个的起点在其中。 – chris
然后从那里你想要所有在一个组中重叠的圈子?不只是那些重叠起始圈的那些? –