Public
Edited
Oct 28, 2021
Importers
3 stars
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
{
const context = DOM.context2d(viewParams.width + 2 * viewParams.padding, viewParams.height + 2 * viewParams.padding);
context.strokeStyle = '#ccc';
context.fillStyle = '#f00';
let links=[];
let toBeRemoved = [];
//check internal
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]]});
}
}
//check hull
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;
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
pointSetsMiniDist(setA,setB);
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more