Public
Edited
Aug 20, 2023
8 stars
Hello, A5Chandrupatla’s root-finding methodSidi’s root-finding methodRegular numbersDruidJS workerNatural breaksDistance to a segmentRay out of a convex hullWord Tour: 40k words and their friendsHello, @thi.ng/grid-iteratorsHead/tail breaksPseudo-blue noise shaderHow fast does walk-on-spheres converge?AoC 12: shortest path under constraintsKDE estimationPlot: Correlation heatmapPoisson Finish 2Poisson disk sampling functionsWoS with transportSimple and surprising sortLocal medianTime series topological subsamplingUnion-Find
Level set experiment 1
Mean value coordinatesPoisson potentialMiddle-squareWorld of squares (spherical)World of squaresLargest Inscribed SquareHello, PyWaveletsGeothmetic meandianHello, Reorder.jsGeometric MedianImage FFTTransport to a mapDisc TransportTP3: Power Diagram and Semi-Discrete Optimal TransportThe blue waveHello, genetic-jsSliced Optimal TransportDruidJSSelf-Organizing Maps meet DelaunayHello, polygon-clippingseedrandom, minimalWalk on Spheres 2Walk on SpheresHello, AutoencoderKaprekar’s numberVoronoiMap2DHello, ccwt.jsPolygon TriangulationQuantile.invert?Linear congruential generatorHue blurNeedle in a haystackMoving average blurApollo 11 implementation of trigonometric functions, by Margaret H. Hamilton (march 1969)2D curves intersectionThe 2D approximate Newton-Raphson methodInverting Lee’s Tetrahedral projectionLinde–Buzo–Gray stipplingMean shift clustering with kd-tree2D point distributionsShortest pathKahan SummationHello, delatinDijkstra’s algorithm in gpu.jsLloyd’s relaxation on a graphManhattan DiameterManhattan VoronoiMobility landscapes — an introductionDijkstra’s shortest-path treeH3 odditiesProtein MatrixConvex Spectral WeightsSort stuff by similarityKrigingDelaunay.findTrianglen-dimensions binning?Travelling with a self-organizing mapUMAP-o-MaticMNIST & UMAP-jsHello UMAP-jsMean shift clusteringLevenshtein transitionRd quasi-random sequencesAutomated label placement (countries)Phyllotaxis explainedMotionrugsPlanar hull (Andrew’s monotone chain algorithm)South Africa’s medial axisTravelling salesperson approximation with t-SNEDistance to shoreWorkerngraph: pagerank, louvain…t-SNE VoronoiCloud ContoursCircular function drawingKruskal MazeMyceliumTravelling salesperson approximation on the globe, with t-SNEtsne.jstsne.js & worker
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
values = (reset,
Float64Array.from({ length: w * h }, () => Math.random() - 0.5))
Insert cell
Insert cell
run = {
const blurred = new Float32Array(values.length);
while (what.length || entropy > 0) {
const t = d3.mean(values);
const e = d3.extent(values);
const s = d3.deviation(values);

blurred.set(values);
d3.blur2({ width: w, data: blurred }, curvature);

// ENTROPY
if (entropy > 0) {
for (let i = 0; i < values.length; i++)
values[i] += (Math.random() - 0.5) * entropy;
}

// EQUALIZE
if (what.includes("equalize")) {
for (let i = 0; i < values.length; i++)
values[i] = -0.5 + (values[i] - t) / s;
}

// BORDER
if (what.includes("border")) {
const M = -1;
let k;
for (let i = 0; i < w; i++) {
values[i] = Math.min(values[i], M);
values[(k = i + (h - 1) * w)] = Math.min(values[k], M);
}
for (let i = 0; i < h; i++) {
values[(k = i * w)] = Math.min(values[k], M);
values[(k = w - 1 + i * w)] = Math.min(values[k], M);
}
}

// MEAN CURVATURE FLOW
if (what.includes("mean curvature flow")) {
for (let i = 0; i < values.length; i++)
values[i] += (blurred[i] - values[i]) * 0.7;
}

visual.update(values);
yield e;
}
}
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