跳至內容

Voronoi 圖

給定一組點,Voronoi 圖將平面分割成代表最接近對應點的平面區域的儲存格。Voronoi 圖是 Delaunay 三角剖分 的對偶。

delaunay.voronoi(bounds)

原始碼 · 傳回給定 Delaunay 三角剖分 的 Voronoi 圖。在繪製時,圖形將會裁剪為指定的 bounds = [xmin, ymin, xmax, ymax]。

js
const delaunay = d3.Delaunay.from([[0, 0], [0, 100], [100, 0], [100, 100]]);
const voronoi = delaunay.voronoi([0, 0, 640, 480]);

如果未指定 bounds,則預設為 [0, 0, 960, 500]。即使在沒有三角剖分存在的簡併情況下,例如 0、1 或 2 個點,以及共線點,Voronoi 圖仍然會傳回。

voronoi.delaunay

Voronoi 圖關聯的 Delaunay 三角剖分

voronoi.circumcenters

Delaunay 三角形的 外心,以 Float64Array [cx0, cy0, cx1, cy1, …] 表示。每對連續的座標 cx, cy 是對應三角形的外心。這些外心形成 Voronoi 儲存格多邊形的座標。

voronoi.vectors

一個 Float64Array [vx0, vy0, wx0, wy0, …],其中每個非零四元組描述外殼上的開放(無限)單元格,提供兩個開放半線的方向。

voronoi.xmin
voronoi.ymin
voronoi.xmax
voronoi.ymax

用於繪製 Voronoi 圖的視窗範圍 [xmin, ymin, xmax, ymax]。這些值僅影響繪製方法 (voronoi.rendervoronoi.renderBoundsvoronoi.renderCell)。

voronoi.contains(i, x, y)

來源 · 如果索引 i 所指定的單元格包含指定的點 ⟨x, y⟩,則傳回 true;,點 i 是否為圖中與指定點最接近的點。(此方法不受相關 Voronoi 圖的視窗 範圍 影響。)

voronoi.neighbors(i)

js
voronoi.neighbors(-1) // []

來源 · 傳回與指定的單元格 i 共用邊緣的單元格索引的 iterable。Voronoi 鄰居在 Delaunay 圖中永遠都是鄰居,但當 Voronoi 圖的視窗裁剪掉共用邊緣時,反之則不然。

voronoi.render(context)

來源 · 將 Voronoi 單元格網格繪製到指定的 context。指定的 context 必須實作 CanvasPathMethods API 中的 context.moveTo 和 context.lineTo 方法。如果未指定 context,則會傳回 SVG 路徑字串。

voronoi.renderBounds(context)

原始碼 · 將視窗範圍渲染到指定的 context。指定的 context 必須實作 CanvasPathMethods API 中的 context.rect 方法。等於 context.rect(voronoi.xmin, voronoi.ymin, voronoi.xmax - voronoi.xmin, voronoi.ymax - voronoi.ymin)。如果未指定 context,則會傳回 SVG 路徑字串。

voronoi.renderCell(i, context)

原始碼 · 將索引為 i 的儲存格渲染到指定的 context。指定的 context 必須實作 CanvasPathMethods API 中的 context.moveTo、context.lineTo 和 context.closePath 方法。如果未指定 context,則會傳回 SVG 路徑字串。

voronoi.cellPolygons()

原始碼 · 傳回每個儲存格的非空 多邊形 的可迭代物件,儲存格索引作為屬性。另請參閱 voronoi.renderCell

voronoi.cellPolygon(i)

原始碼 · 傳回凸閉多邊形 [[x0, y0], [x1, y1], …, [x0, y0]],表示指定點 i 的儲存格。另請參閱 voronoi.renderCell

voronoi.update()

原始碼 · 在點已就地修改後更新 Voronoi 圖和基礎三角剖分 — 適用於 Lloyd 的放鬆。在基礎 Delaunay 三角剖分上呼叫 delaunay.update