centers = {
let n = seeds.length;
let incidentEdges = [];
let bisector = function (a,b) {
let midpoint = a.add(b).scale(0.5);
let dir = b.sub(a);
return new Ray(midpoint,Vec(-dir.y,dir.x))
}
for (let i = 0; i < n; i++) {
incidentEdges[i] = [];
let s = seeds[i];
for (let [p,q] of edges) {
if (q.dist(s) < 0.001) [p,q] = [q,p];
if (p.dist(s) < 0.001 && (q.x > p.x || (Math.abs(q.x - p.x)<0.001 && q.y < p.y))) incidentEdges[i].push(q);
}
incidentEdges[i].sort((a,b) => a.y-b.y);
}
mutable iedges = incidentEdges;
let centers = [];
for (let i = 0; i < n; i++) {
let k = incidentEdges[i].length;
if (k < 2) continue;
let s = seeds[i];
for (let j = 1; j < k; j++) {
let ray1 = bisector(s,incidentEdges[i][j-1]);
let ray2 = bisector(s,incidentEdges[i][j]);
let [t,u] = ray1.intersectRay (ray2);
let center = ray1.point(t);
centers.push ({o : center, d:center.dist(s), s:s});
}
}
return centers;
}