The empty-circumcircle rule: no point lies inside the circle through a triangle's vertices. That maximizes the smallest angle and avoids extremely narrow triangles, producing a more balanced mesh.
Create deterministic SVG triangle meshes for backgrounds, posters and generative assets.
Delaunay triangulation connects a set of points into triangles following an elegant rule: no point may lie inside the circle passing through another triangle's vertices (the empty-circumcircle property). In practice, this maximizes the smallest angle of each triangle and avoids the thin "slivers" that appear when points are joined haphazardly, giving an organic, balanced mesh. It is the basis of those low-poly backgrounds on posters and splash screens. Here, the seed and point count make each mesh reproducible, essential for versioning an asset and recreating it identically later.
Given a handful of points, there are many ways to join them into triangles. Delaunay triangulation picks the one that satisfies the empty-circumcircle criterion: for each triangle, the circle touching its three vertices contains no other point. That condition pushes the mesh toward fatter, more uniform triangles.
The visual effect is what makes the low-poly style work: instead of uneven needles, you see facets of similar sizes, like a crystal or a faceted surface. Increasing jitter scatters the points more irregularly; reducing it moves toward a tidier grid.
Example 1, a low-poly background for a hero section: use a low point count (dozens, say) for large, clean facets, apply a color gradient in your editor, and the result becomes a light backdrop that does not compete with the text on top.
Example 2, a dense poster texture: raise the points to the hundreds to generate smaller facets, creating a surface that is rich up close. Pin the seed before exporting: if you need the same pattern at another size or in a color variation, just regenerate with the same seed.
Because the output is vector SVG, it scales without losing sharpness and lets you edit colors, opacity and strokes in any compatible editor. That makes it ideal for hero art, covers, slides and editorial material, always as a background, never fighting the content's reading contrast.
Keep the cost in mind: each triangle is one element in the SVG, so hundreds of points produce heavy files that can hurt page performance. This is a visual implementation for generative design, not a precision CAD or GIS library. Use the lowest density that delivers the texture you want.
Paste the code into your HTML and the tool shows up on your page, without J-Kit's navigation and ads. It still runs in the browser of whoever visits your site.
<iframe
src="https://jkit.tools/embed/en-US/delaunay-triangulation-generator"
width="100%"
height="600"
style="border:0"
loading="lazy"
title="Delaunay Triangulation Generator"
></iframe>These references help contextualize formulas, standards, APIs and limitations used on this page. They do not replace professional validation when a result has legal, financial, medical or operational impact.
The empty-circumcircle rule: no point lies inside the circle through a triangle's vertices. That maximizes the smallest angle and avoids extremely narrow triangles, producing a more balanced mesh.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 420" role="img" aria-label="Delaunay triangulation"><rect width="100%" height="100%" fill="#101412"/><polygon points="462.2,248.3 417.5,189.1 462.1,231.5" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="417.5,189.1 290.1,362.2 396.6,173.2" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="596.8,250.6 581.4,272.2 557.8,267.0" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="581.4,272.2 596.8,250.6 691.6,361.8" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="310.0,52.1 269.8,82.8 290.0,40.1" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="109.8,160.2 203.2,114.0 136.2,265.2" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="203.2,114.0 109.8,160.2 149.9,94.3" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="269.8,82.8 203.2,114.0 149.9,94.3" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="290.0,40.1 269.8,82.8 149.9,94.3" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="136.2,265.2 203.2,114.0 170.9,287.6" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="290.1,362.2 163.9,321.0 170.9,287.6" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="163.9,321.0 136.2,265.2 170.9,287.6" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="109.8,160.2 136.2,265.2 53.1,233.4" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="136.2,265.2 76.1,264.7 53.1,233.4" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="462.2,248.3 462.1,231.5 496.9,231.1" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="557.8,267.0 462.2,248.3 496.9,231.1" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="269.8,82.8 310.0,52.1 274.7,124.7" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="203.2,114.0 269.8,82.8 274.7,124.7" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="396.6,173.2 290.1,362.2 274.7,124.7" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="290.1,362.2 170.9,287.6 274.7,124.7" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="170.9,287.6 203.2,114.0 274.7,124.7" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="417.5,189.1 396.6,173.2 461.4,144.2" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="462.1,231.5 417.5,189.1 461.4,144.2" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="581.4,272.2 691.6,361.8 615.5,373.0" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="691.6,361.8 687.0,395.7 615.5,373.0" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="461.4,144.2 396.6,173.2 418.6,99.6" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="560.5,133.9 461.4,144.2 418.6,99.6" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="596.8,250.6 557.8,267.0 512.7,197.5" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="557.8,267.0 496.9,231.1 512.7,197.5" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="496.9,231.1 462.1,231.5 512.7,197.5" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="462.1,231.5 461.4,144.2 512.7,197.5" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="461.4,144.2 560.5,133.9 512.7,197.5" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="417.5,189.1 462.2,248.3 423.9,352.8" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="290.1,362.2 417.5,189.1 423.9,352.8" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="290.0,40.1 149.9,94.3 67.8,94.2" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="149.9,94.3 109.8,160.2 67.8,94.2" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="109.8,160.2 53.1,233.4 67.8,94.2" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="76.1,264.7 136.2,265.2 65.9,323.8" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="136.2,265.2 163.9,321.0 65.9,323.8" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="53.1,233.4 76.1,264.7 65.9,323.8" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="163.9,321.0 290.1,362.2 88.4,389.0" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="65.9,323.8 163.9,321.0 88.4,389.0" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="462.2,248.3 557.8,267.0 479.4,356.4" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="423.9,352.8 462.2,248.3 479.4,356.4" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="310.0,52.1 290.0,40.1 384.2,81.7" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="290.0,40.1 560.5,133.9 384.2,81.7" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="560.5,133.9 418.6,99.6 384.2,81.7" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="396.6,173.2 274.7,124.7 384.2,81.7" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="418.6,99.6 396.6,173.2 384.2,81.7" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="274.7,124.7 310.0,52.1 384.2,81.7" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="691.6,361.8 596.8,250.6 586.2,157.4" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="596.8,250.6 512.7,197.5 586.2,157.4" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="512.7,197.5 560.5,133.9 586.2,157.4" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="557.8,267.0 581.4,272.2 528.8,390.8" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="581.4,272.2 615.5,373.0 528.8,390.8" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="88.4,389.0 290.1,362.2 528.8,390.8" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="479.4,356.4 557.8,267.0 528.8,390.8" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="290.1,362.2 423.9,352.8 528.8,390.8" fill="rgba(61,220,151,.18)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="423.9,352.8 479.4,356.4 528.8,390.8" fill="rgba(229,196,107,.12)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><polygon points="615.5,373.0 687.0,395.7 528.8,390.8" fill="rgba(78,168,222,.13)" stroke="rgba(230,236,232,.36)" stroke-width="1"/><circle cx="417.5" cy="189.1" r="2.2" fill="#3DDC97"/><circle cx="462.2" cy="248.3" r="2.2" fill="#3DDC97"/><circle cx="109.8" cy="160.2" r="2.2" fill="#3DDC97"/><circle cx="581.4" cy="272.2" r="2.2" fill="#3DDC97"/><circle cx="290.1" cy="362.2" r="2.2" fill="#3DDC97"/><circle cx="462.1" cy="231.5" r="2.2" fill="#3DDC97"/><circle cx="396.6" cy="173.2" r="2.2" fill="#3DDC97"/><circle cx="310.0" cy="52.1" r="2.2" fill="#3DDC97"/><circle cx="596.8" cy="250.6" r="2.2" fill="#3DDC97"/><circle cx="203.2" cy="114.0" r="2.2" fill="#3DDC97"/><circle cx="76.1" cy="264.7" r="2.2" fill="#3DDC97"/><circle cx="557.8" cy="267.0" r="2.2" fill="#3DDC97"/><circle cx="269.8" cy="82.8" r="2.2" fill="#3DDC97"/><circle cx="691.6" cy="361.8" r="2.2" fill="#3DDC97"/><circle cx="290.0" cy="40.1" r="2.2" fill="#3DDC97"/><circle cx="687.0" cy="395.7" r="2.2" fill="#3DDC97"/><circle cx="163.9" cy="321.0" r="2.2" fill="#3DDC97"/><circle cx="136.2" cy="265.2" r="2.2" fill="#3DDC97"/><circle cx="149.9" cy="94.3" r="2.2" fill="#3DDC97"/><circle cx="170.9" cy="287.6" r="2.2" fill="#3DDC97"/><circle cx="53.1" cy="233.4" r="2.2" fill="#3DDC97"/><circle cx="560.5" cy="133.9" r="2.2" fill="#3DDC97"/><circle cx="496.9" cy="231.1" r="2.2" fill="#3DDC97"/><circle cx="274.7" cy="124.7" r="2.2" fill="#3DDC97"/><circle cx="461.4" cy="144.2" r="2.2" fill="#3DDC97"/><circle cx="615.5" cy="373.0" r="2.2" fill="#3DDC97"/><circle cx="418.6" cy="99.6" r="2.2" fill="#3DDC97"/><circle cx="512.7" cy="197.5" r="2.2" fill="#3DDC97"/><circle cx="423.9" cy="352.8" r="2.2" fill="#3DDC97"/><circle cx="67.8" cy="94.2" r="2.2" fill="#3DDC97"/><circle cx="65.9" cy="323.8" r="2.2" fill="#3DDC97"/><circle cx="88.4" cy="389.0" r="2.2" fill="#3DDC97"/><circle cx="479.4" cy="356.4" r="2.2" fill="#3DDC97"/><circle cx="384.2" cy="81.7" r="2.2" fill="#3DDC97"/><circle cx="586.2" cy="157.4" r="2.2" fill="#3DDC97"/><circle cx="528.8" cy="390.8" r="2.2" fill="#3DDC97"/></svg>The mesh is generated locally; the seed is not sent to the server.