Published
Edited
Apr 26, 2021
1 fork
1 star
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
triangles = new delaunator(stars, p => p.x, p => p.y).triangles
Insert cell
Insert cell
function distance(a, b) {
return Math.sqrt((a.x - b.x)**2 + (a.y - b.y)**2)
}
Insert cell
function generatePoint(origin, sigma, maxDistanceFromOrigin) {
let point = {x:d3.randomNormal(origin.x, sigma)(), y:d3.randomNormal(origin.y, sigma)()}
if (distance(point, origin) > maxDistanceFromOrigin) {
point = generatePoint(origin, sigma, maxDistanceFromOrigin)
}
return point
}
Insert cell
function shouldRemoveFromCircle(point, origin, radius) {
let pointRadius = distance(point, origin);
return pointRadius < radius;
}
Insert cell
function* pointGenerator(origin, sigma, minDistance, amount, maxDistanceFromOrigin) {
let points = [];
nextPoint: while (points.length < amount) {
let point = generatePoint(origin, sigma)
if (shouldRemoveFromCircle(point, origin, coreRadius, maxDistanceFromOrigin)) {
continue nextPoint;
}
for (let otherPoint of points) {
if (distance(point, otherPoint) < minDistance) {
continue nextPoint
}
}
points.push(point)
yield point
}
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
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