{
const context = DOM.context2d(viewParams.width + 2 * viewParams.padding, viewParams.height + 2 * viewParams.padding);
context.strokeStyle = '#ccc';
context.fillStyle = '#f00';
let links=[];
let toBeRemoved = [];
for (let i = 0, n = delaunay.halfedges.length; i < n; i++) {
const j = delaunay.halfedges[i];
if (j < i) continue;
const ti = delaunay.triangles[i];
const tj = delaunay.triangles[j];
let midpoint = [(delaunay.points[ti * 2] + delaunay.points[tj * 2]) / 2 , (delaunay.points[ti * 2+1] + delaunay.points[tj * 2+1]) / 2];
if ([ti,tj].includes(delaunay.find(midpoint[0], midpoint[1], ti))) {
links.push({source:[delaunay.points[ti * 2], delaunay.points[ti * 2 + 1]], target:[delaunay.points[tj * 2], delaunay.points[tj * 2 + 1]]});
} else {
toBeRemoved.push({source:[delaunay.points[ti * 2], delaunay.points[ti * 2 + 1]], target:[delaunay.points[tj * 2], delaunay.points[tj * 2 + 1]]});
}
}
for (let i = 0, n = delaunay.hull.length; i < n; i++) {
const ti = delaunay.hull[i === 0 ? delaunay.hull.length - 1 : i - 1];
const tj = delaunay.hull[i];
let midpoint = [(delaunay.points[ti * 2] + delaunay.points[tj * 2]) / 2 , (delaunay.points[ti * 2+1] + delaunay.points[tj * 2+1]) / 2];
if ([ti,tj].includes(delaunay.find(midpoint[0], midpoint[1], ti))) {
links.push({source:[delaunay.points[ti * 2], delaunay.points[ti * 2 + 1]], target:[delaunay.points[tj * 2], delaunay.points[tj * 2 + 1]]});
} else {
toBeRemoved.push({source:[delaunay.points[ti * 2], delaunay.points[ti * 2 + 1]], target:[delaunay.points[tj * 2], delaunay.points[tj * 2 + 1]]});
}
}
for (let i = 0; i < links.length; ++i) {
let link = links[i]
context.strokeStyle = '#888';
context.beginPath();
context.moveTo(link.source[0], link.source[1]);
context.lineTo(link.target[0], link.target[1]);
context.stroke();
}
for (let i = 0; i < toBeRemoved.length; ++i) {
context.strokeStyle = '#f00';
context.beginPath();
context.moveTo(toBeRemoved[i].source[0], toBeRemoved[i].source[1]);
context.lineTo(toBeRemoved[i].target[0], toBeRemoved[i].target[1]);
context.stroke();
}
context.fillStyle = '#000';
for (let i = 0; i < points.length; ++i) {
context.beginPath();
context.arc(points[i][0], points[i][1], viewParams.padding, 0, 2 * Math.PI);
context.fill();
}
return context.canvas;
}