オーバーラップする円を正しく検出するには、このコードを修正できますか? 最初の円は出発点の位置をテストすることによって指定されます。この最初の円は、重なっている円マップの基礎になるはずです。明確化のために:我々は試験した丸は非分岐ラインに重複する場合今、それだけ...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();
EDIT作品潜在的にオーバーラップする円の配列と開始点と終了点の2点。私たちは、重複している円のパスを作成したいと思います。最初のものから始まり、終わりのもので終わります。いくつかの潜在的な経路が存在する可能性があります。経路があるかどうかを知りたいだけです。
あなたは、互いに重なり合うサークル、または開始点と重なるサークルを意味しますか? –
お互いが重なっていますが、重なりを開始する最初の円は開始点を持つ円です。開始点を含む複数の円があることに注意してください。 – chris
そこからグループ内で重なり合っているすべてのサークルが欲しいですか?スタートサークルと重複するものだけではありませんか? –