D3.js is a strong JavaScript framework for data visualization, and one of its modules, Delaunay, supports Delaunay triangulation. The Delaunay.trianglePolygons() Method returns an iterable over the polygons for each triangle, in order.
Syntax:
Delaunay.trianglePolygons()
Parameters:
This method takes no parameters.
Return Value:
This method returns an Iterable over the polygons.
Example 1: The below code example shows the use of the Delaunay.trianglePolygons() method.
<!DOCTYPE html> < html >
< head >
< meta charset = "utf-8" >
< script src =
</ script >
</ head >
< body >
< h1 style="text-align: center;
color: green;">
GeeksforGeeks
</ h1 >
< h3 style = "text-align: center;" >
D3.js | d3.trianglePolygons() Method
</ h3 >
< div id = "app" style="text-align: center;
margin-top: 20px;
font-size: 18px;">
</ div >
< script type = "module" >
import * as d3 from "https://cdn.skypack.dev/d3@7";
const canvasWidth = 400;
const canvasHeight = 300;
const canvas =
document.createElement("canvas");
const context =
canvas.getContext("2d");
canvas.width = canvasWidth;
canvas.height = canvasHeight;
const data = Array(50)
.fill()
.map((_, i) => ({
x: (i * canvasWidth) / 50,
y: Math.random() * canvasHeight
}));
const voronoi = d3.Delaunay.from(
data,
(d) => d.x,
(d) => d.y
).voronoi([0, 0, canvasWidth, canvasHeight]);
context.clearRect(0, 0, canvasWidth, canvasHeight);
context.fillStyle = "black";
context.beginPath();
voronoi.delaunay.renderPoints(context, 1);
context.fill();
context.lineWidth = 1.5;
const segments =
voronoi.render().split(/M/).slice(1);
for (const e of segments) {
context.beginPath();
context.strokeStyle =
d3.hsl(360 * Math.random(), 0.7, 0.5);
context.stroke(new Path2D("M" + e));
}
const trianglePolygons =
voronoi.delaunay.trianglePolygons();
console.log(trianglePolygons)
document.querySelector("#app").
appendChild(canvas);
</ script >
</ body >
</ html >
|
Output:
Example 2: The below code uses the d3.Delaunay.trianglePolygons() method to render the individual triangles of a Delaunay triangulation on a canvas.
<!DOCTYPE html> < html >
< head >
< meta charset = "utf-8" >
</ head >
< body style = "text-align: center;" >
< h1 style = "text-align: center; color: green;" >
GeeksforGeeks
</ h1 >
< h3 style = "text-align: center;" >
D3.js | Delaunay Triangles with trianglePolygons()
</ h3 >
< div id = "app" style=
"text-align: center;
margin-top: 20px;">
</ div >
< script type = "module" >
import * as d3 from "https://cdn.skypack.dev/d3@7";
const width = 600;
const height = 400;
const points = Array.from({ length: 50 },
() => [Math.random() * width,
Math.random() * height]);
const delaunay = d3.Delaunay.from(points);
const triangles = delaunay.trianglePolygons();
const canvas = d3.select("#app")
.append("canvas")
.attr("width", width)
.attr("height", height);
const context =
canvas.node().getContext("2d");
context.beginPath();
delaunay.renderPoints(context);
context.fillStyle = "black";
context.fill();
context.lineWidth = 2;
for (const triangle of triangles) {
context.beginPath();
context.strokeStyle = "blue";
context.moveTo(triangle[0][0], triangle[0][1]);
for (const point of triangle) {
context.lineTo(point[0], point[1]);
}
context.closePath();
context.stroke();
}
</ script >
</ body >
</ html >
|
Output: