Я пытаюсь внести изменения в код, так как я новичок в d3 и наблюдаемые у меня проблемы. Я понимаю, что такое алгоритм, но все создаваемые круги находятся не совсем внутри прямоугольника. Так что я не знаю, где изменить код, чтобы исправить это. Вот часть кода, которая генерирует круг. но как создать круги точно внутри прямоугольника - это проблема.
quadtree.visit((node, x1, y1, x2, y2) => {
if (!node.length) {
do {
const [px, py, pr] = node.data;
const dx = x - px;
const dy = y - py;
const d2 = dx * dx + dy * dy;
const r2 = pr * pr;
if (d2 < r2) return distance = 0, true; // within a circle
const d = Math.sqrt(d2) - pr;
if (d < distance) distance = d;
} while (node = node.next);
}
return !distance || x1 > rx2 || x2 < rx1 || y1 > ry2 || y2 < ry1; // or outside search radius
});
if (distance > bestDistance) bestX = x, bestY = y, bestDistance = distance;
}
if (bestDistance <= padding) return null;
const best = [bestX, bestY, bestDistance - padding];
quadtree.add(best);
return best;
Это ссылка на полный код https://observablehq.com/@mbostock / best -андидат-круги .