DIT DOTS KO6ETZ HAM RADIO • ELECTRONICS • SOFTWARE 14.074 MHz TX PWR RX

Voronoi DD

Interactive Voronoi & power diagrams — for points and line segments, in 2D and 3D.

Draw wells, roads, towers or components and watch their territories re-tessellate in real time — or switch to 3D and slice, explode, animate and measure polyhedral cells in a box, a sphere, a gem, a vase or a chess pawn. Weighted cells, grouped networks, CVT optimization and exact area and volume analytics — running entirely in your browser.

▶ Launch the app Open in 3D ▶ Watch the walkthrough Read the manual
new: 3D cells no install no server — Python (numpy/scipy) via WebAssembly your data never leaves the browser CSV in / CSV out

See it in three minutes

Clicking points and dragging segments into new cells, weights and polylines, then 3D: section planes, exploded views, eleven shapes and live animations.

3:17

Short on time? Watch the 0:58 highlights on YouTube.

Oil field drainage areas: vertical wells and horizontal laterals with their Voronoi territories
Oil-field drainage: vertical wells (points) drain disk-like cells, horizontal laterals (segments) drain corridors — the reason segment seeds exist.

New in 2.0: 3D cells

Everything Voronoi DD does in the plane now works in space. Points and 3D segments (wells, vessels, fibers, cables) partition a box, a sphere, a capsule, a gem, a vase, a bone or a chess pawn into exact polyhedral cells — weighted, grouped, sliced, exploded, animated and measured. Flip the 2D | 3D switch at the top of the app’s sidebar.

Voronoi DD in the browser, 3D mode: a vascularized tumor nodule in an ellipsoid domain cut by a section plane, with the exact 2D cross-section in the corner inset
The browser app in 3D: a vascularized tumor nodule (ellipsoid domain) cut at Y = 0. The pink band is the oxygen-supply corridor of one grouped capillary; the inset is the exact cross-section.
Desktop 3D tab with a section plane and the linked 2D section panel

Slice it

Cut the tessellation with a plane on X, Y, Z or any custom normal: clip either side, keep a slab, or show the section only. Every polyhedron is clipped exactly and the cut faces are drawn in the cell’s color, while a linked 2D panel shows the cross-section map with its total area.

Ctrl+click on the plane adds a new seed right there — its cell appears in 3D on the next recompute. Sweep animates the plane through the domain.

Exploded Laguerre grain structure colored by face count
BCC iron crystal with the outer layers peeled: truncated octahedra

Take it apart

Explode cells away from the center (radially or along one axis), shrink them about their centroids, peel the outer layers like an onion, hide edge cells, keep only a metric range or one group, or isolate a cell with its neighbors. Hidden cells stay as faint glass for context.

Peel two layers off a BCC iron crystal and the interior is a perfect stack of 14-faced truncated octahedra — exactly what crystallography predicts.

Desktop Analyze tab: tessellation statistics and an isolated particle with its ten neighbors

Measure it

Per cell: volume, surface area, faces, neighbors and the contact area of every wall, sphericity, elongation (from the inertia tensor), equivalent diameter and depth layer. Color by any of them, hover for an info card, and export the whole table — plus the weighted contact graph — as CSV.

Domain volumes are exact and the cells tile them exactly, so the numbers are usable as declustering weights, drainage volumes, free volume or local fiber fraction.

Glass-style reservoir drainage volumes with vertical, deviated and horizontal wells
Wireframe strut lattice of a graded bone scaffold in a cylinder

See it your way, take it with you

Solid, solid + edges, glass (seeds and inner walls show through) or wireframe; perspective or orthographic; camera presets, auto-rotate and vertical exaggeration for geoscience models.

Export OBJ (Blender, MeshLab, CAD), VTK (ParaView) and a printable strut-lattice STL — the classic Voronoi foam for 3D-printed scaffolds and infill.

Voronoi cells filling a vase-shaped solid of revolution
A brilliant-cut gemstone split into faceted Voronoi shards and exploded

Any shape, not just a box

Fill a box, sphere/ellipsoid, cylinder, capsule, cone, egg, brilliant-cut gem or hexagonal prism — or the non-convex vase, bone and chess pawn. Every shape is inscribed in the X/Y/Z bounds, so the bounds set its size and proportions.

The non-convex shapes are split into exact convex slabs behind the scenes; the seams are invisible and volumes still add up to the shape’s volume exactly. Wireframe + strut-lattice STL turns the vase or the pawn into a printable Voronoi lattice.

1:27

Animate it

Nine presets: turntable, explode / implode, slice sweep, onion peel, print build-up (cells appear layer by layer like a 3D printer), grow from center, live Brownian motion and weight pulse that re-tessellate every frame, and CVT relaxation.

Record any of them: WebM in the browser, GIF or MP4 in the desktop app. The video plays them on twelve of the 3D datasets in eight domain shapes, rendered by the app itself.

Sixteen 3D datasets

MetallurgyBCC Iron Crystal with Point Defects

Radical Voronoi of iron atoms: truncated octahedra, a vacancy, a chromium substitution and a carbon interstitial.

Materials sciencePolycrystalline Steel

Laguerre grains from lognormal grain sizes — face statistics close to Kelvin’s foam limit.

OncologyVascularized Tumor Nodule

Tumor cells in an ellipsoid and three grouped capillaries: each vessel’s oxygen-supply volume.

PetroleumReservoir Drainage Volumes

Vertical, deviated and horizontal wells in a stacked reservoir; injectors weighted for pressure support.

MiningDrill-hole Declustering

Composited samples along inclined holes: each cell is a sample’s volume of influence.

Telecom / RFOffice Wi-Fi Best-Server Volumes

Four floors of access points and a leaky-feeder shaft — slice each floor to read its coverage.

AstrophysicsCosmic Web

Clusters, filaments and voids: density = 1 / cell volume; the biggest cells are the voids.

Soft matterBinary Lennard-Jones Liquid

Radical weights per species give each particle its share of space — local free volume.

Biomedical / AMGraded Bone Scaffold

A dense cortical shell around an open core, in a cylinder — export it as a printable lattice.

CompositesShort-Fiber Composite

Fibers as 3D segments plus filler particles: the matrix region each fiber reinforces.

Art / 3D printingVoronoi Vase

A relaxed lattice filling a vase — the classic printed Voronoi vase, ready for STL export.

3D printingVoronoi Chess Pawn

Cells that follow the turned profile of base, stem, collar and head.

Art / jewelryShattered Gemstone

A brilliant-cut stone split into faceted shards — explode it.

Developmental biologyC. elegans Embryo

The 24-cell stage with lineage names (ABalaa…, MSa, Ea, P4) inside its eggshell.

BiomechanicsTrabecular Femur

Dense trabecular ends and long shaft cells in a bone-shaped domain.

PharmaceuticsMultiparticulate Capsule

Laguerre-packed pellets in a size-0 capsule; void space per pellet.

▶ Open Voronoi DD in 3D

What it does

A Voronoi diagram assigns every location to its nearest seed. Voronoi DD extends the classic picture three ways that real problems need: segments as first-class seeds, weights that grow or shrink territories, and groups that make a network act as one unit.

Weighted power diagram of telecom towers

Weighted cells (power diagrams)

Give an element a weight and its territory grows — a macro tower out-reaches a small cell, an anchor store out-pulls a kiosk, a big grain swallows its neighbors. Mathematically a power / Laguerre diagram: walls stay straight, they just shift toward the lighter site.

Editing is live: hold Shift and scroll the mouse wheel over any element and watch its cell inflate or deflate.

A river polyline grouped into one riparian corridor

Groups: networks act as one

A river drawn as three chained segments shouldn’t have internal walls at the joints. Elements sharing a group name get one color, merged cells and aggregated analytics — one riparian corridor, one metro catchment, one power rail.

Turn on Auto-group chained segments and any polyline you draw is detected and grouped automatically.

Clustered points before relaxation
Uniform centroidal tessellation after relaxation

Optimize with Lloyd / CVT

“Spread these facilities evenly over the territory” is a solved problem: Lloyd’s algorithm moves every point to its cell’s centroid and repeats. Watch 14 clustered points relax into a uniform centroidal Voronoi tessellation — while segments stay fixed as infrastructure the points arrange themselves around.

Cells colored by area with a colorbar

Analytics, not just pictures

Five visualization modes including a distance heat map (true point-to-segment distance field) and a cell-area map that instantly shows over- and under-served territory.

Hover any cell for its exact area, weight, group and the list of neighbors it shares a wall with. Export areas writes a CSV with exact clipped areas plus the full neighbor graph — the input for allocation and weighting workflows.

PCB thermal zones dataset

Edit everything in real time

Click to add a point. Drag to add a segment. Ctrl+drag to move an element and watch the whole map re-tessellate live under your cursor. Right-click deletes, Ctrl+Z undoes fifty steps back.

Every regeneration runs the full scientific-Python geometry engine (numpy + scipy, compiled to WebAssembly) in 10–60 ms — locally, in your browser tab.

Eleven industry datasets built in

Each sample pairs points with segments the way that domain actually uses proximity partitions, with real-world element IDs and a “things to try” guide shown in the app.

PetroleumOil Field — Well Drainage

Vertical wells vs horizontal laterals; cell area ≈ drained acreage. Stimulated wells carry weights.

ElectronicsPCB Thermal Zones

Components weighted by dissipated power; grouped power rails. First-order copper-allocation map.

Urban planningCity School Catchments

Schools weighted by capacity, grouped avenues capturing frontage corridors.

RetailRetail Trade Areas

Stores (weighted anchors) vs arterial roads modeling drive-by capture.

Telecom / RFTelecom Best-Server Map

Macro vs small cells as a power diagram; a grouped highway corridor.

UtilitiesPower Grid Territories

Capacity-weighted substations and grouped transmission lines.

Public safetyEmergency Response Districts

First-due districts per fire station; a grouped river shows barrier distortion.

AgricultureIrrigation Command Areas

A grouped canal network (main + branches) vs wells — segments at their best.

Materials scienceGrain Microstructure

Lognormal grain-size weights make a true Laguerre diagram; dislocation lines cut defect zones.

TransitMetro Line Catchments

Two grouped metro lines vs surface stops: walk-to-line vs walk-to-stop planning.

Mining / geologyBorehole Declustering

Cell area per borehole = its polygonal declustering weight; grouped fault traces partition blocks.

User manual

Getting started

  1. Open the app — the first visit downloads the Python/scipy runtime (~30 MB, cached afterwards; later visits start in seconds).
  2. Pick a sample dataset — its description and “things to try” appear in the sidebar — or start from the blank canvas.
  3. Click and drag on the map. Everything regenerates as you edit.

Mouse & keyboard

InputAction
left clickadd a point (auto-ID P1, P2, …)
left dragadd a segment with a rubber-band preview (L1, …)
Ctrl + dragmove the nearest point or segment endpoint — the diagram re-tessellates live
right-clickdelete the nearest element
Shift + wheeladjust the nearest element’s weight (live power diagram)
wheelzoom at the cursor
middle-dragpan the view
hoverhighlight the cell + info card: area, weight, group, neighbors
Ctrl+Z / Escundo (50 steps) / cancel an in-progress drag or move

Visualization modes

Basic diagramcell walls only, in blue
Colored cellsone pastel per element or group + black walls — the workhorse view
Boundaries onlythin black walls, no fills
Heat map (distance)distance-to-nearest-element field (segments use true point-to-segment distance) with a colorbar
Heat map (cell area)cells colored by their element’s total area, 5–95th percentile scale, with a colorbar

Boundary modes & bounds

Bounded clips the diagram to the X/Y bounds — areas are exact and physically meaningful. The clip box expands automatically to the window’s shape so cells always fill the canvas, and it re-clips when you resize. Infinite look lets cells run past the viewport for the classic unbounded picture (areas are then only relative).

Weights, groups and Lloyd

Weights are in squared-distance units: positive grows a cell, negative shrinks it, and a massively out-weighted element can end up with no territory at all (it is “hidden”). A segment’s weight applies to its whole corridor. Groups come from the dataset’s Group column or the auto-group toggle. Lloyd step / Relax (CVT) move every point to its cell centroid (segments never move) — Bounded mode only.

Data in & out

ID,X,Y,X2,Y2,Type,Weight,Group
V-01,-7.35,6.53,,,point,2.5,
H-01,-8.5,-1.5,-2.5,-0.3,line_segment,,
R1,-9.5,3.0,-3.0,1.0,line_segment,,River

Import CSV / Export CSV use this format — Weight and Group are optional, and files are fully interchangeable with the desktop app. Export areas writes one row per element with its exact clipped cell area and a semicolon-separated Neighbors list (which elements share a wall) — the analysis product behind every allocation workflow.

3D mode

Switch with the 2D | 3D toggle (or open ditdots.com/voronoi/#3d). The 3D view needs WebGL, which every current desktop browser has.

Input (3D)Action
left drag / right drag / wheelorbit / pan / zoom
hover / clickinfo card (volume, surface, faces, neighbors, sphericity, …) / select the cell
Ctrl + clickadd a point on the active section plane — a new cell appears
right-clickdelete the element under the cursor
Shift + wheelchange the weight of the cell under the cursor
Ctrl+Z / Escundo / clear the selection

Domain: box, ellipsoid, cylinder, capsule, cone, egg, gem, hexagonal prism, vase, bone or chess pawn, inscribed in the X/Y/Z bounds. Animate: preset, duration, loop, play/stop and Record WebM. View: style, color-by metric with colorbar, colormap, vertical exaggeration, field of view, perspective/orthographic, camera presets. Slice: plane axis or custom normal, position, clip below / above / slab / section-only, cut caps and the 2D inset. Decompose: explode (radial or per axis), shrink, peel layers, range and group filters, isolate. Generate: uniform, Poisson-disk, clustered, SC/BCC/FCC/HCP lattices, graded, radial, random fibers — then Lloyd / CVT in 3D.

ID,X,Y,Z,X2,Y2,Z2,Type,Weight,Group
Fe-012,2.15,2.15,6.449,,,,point,1.5876,
V-01,300,300,-2105,300,300,-2395,line_segment,,

3D files add a Z column (importing one in 2D mode switches to 3D automatically). Exports: dataset CSV, cell metrics CSV, contact graph CSV, section CSV, OBJ, VTK, strut-lattice STL and a PNG of the view.

Tips & troubleshooting

First load is slowThe Python runtime (~30 MB) downloads once from a CDN and is cached; later visits start in seconds.
A weighted element has no cellIt is out-weighted (“hidden”). Lower the neighbors’ weights or raise its own with Shift+wheel near its marker.
Walls between the reaches of a polylineIntentional until grouped — enable Auto-group chained segments or set a Group in the CSV.
Lloyd button does nothingIt needs Bounded mode and at least one point element; segments alone can’t relax.
Areas look enormousYou are in Infinite look; switch to Bounded for physically meaningful areas.
Exact parabolic arcs?The browser uses the fast sampled solver. The desktop app adds an exact segment-Voronoi solver (Boost.Polygon) with true parabolic bisectors.
3D view stays blankWebGL is disabled or blocked (some remote-desktop sessions and locked-down browsers). Enable hardware acceleration and reload.
3D segment cells look facetedSegments are sampled into sub-seeds, so the curved surfaces around them are slightly scalloped. Cell volumes are still exact for the sampled geometry.
Privacy: the geometry engine runs inside your browser tab via WebAssembly. Nothing you draw or import is uploaded anywhere.
Desktop companion: Voronoi DD is also a full desktop application (Python) with an exact parabolic-arc solver, a spreadsheet-style dataset editor, and a 3D Cells tab with a sortable element table, a linked 2D section panel, statistics charts (volume distribution, faces, Lewis’ law) and turntable GIF export. Same engines, same CSV files — datasets travel freely between the two.
Voronoi DD desktop app, 3D Cells tab: BCC iron crystal with the outer layer peeled, element table with volumes
The desktop app’s 3D Cells tab: a BCC iron crystal with its outer layer peeled; the element table lists every cell’s volume.

Map your territory — or your volume

▶ Launch Voronoi DD Open in 3D

Part of Dit Dots by KO6ETZ — ham radio · electronics · software.
Geometry: numpy + scipy running in-browser via Pyodide; 3D view: three.js.