Spec-Zone.ru › D3.js 6

d3-delaunay

Георгий «Воронатор» Вороной

Это быстрая библиотека для вычисления диаграммы Вороного набора двумерных точек. Она основана на Delaunator, быстродействующей библиотеке для вычисления треугольной триангуляции Делоне с использованием алгоритмов обхода. Диаграмма Вороного строится путём соединения окружных центров смежных треугольников в триангуляции Делоне.

Для интерактивного объяснения работы этой библиотеки, см. The Delaunay’s Dual.

Установка

Для установки, npm install d3-delaunay или yarn add d3-delaunay. Вы также можете скачать последнюю версию или загрузить напрямую с unpkg. Поддерживаются среды AMD, CommonJS и ES6+. В чистом JavaScript экспортируется глобальная переменная d3.

import {Delaunay} from "d3-delaunay";

const points = [[0, 0], [0, 1], [1, 0], [1, 1]];
const delaunay = Delaunay.from(points);
const voronoi = delaunay.voronoi([0, 0, 960, 500]);

Справочник API

Delaunay

new Delaunay(points) Источник

Возвращает триангуляцию Делоне для заданного плоского массива [x0, y0, x1, y1, …] точек.

const delaunay = new Delaunay(Float64Array.of(0, 0, 0, 1, 1, 0, 1, 1));
Delaunay.from(points[, fx[, fy[, that]]]) Источник

Возвращает триангуляцию Делоне для заданного массива или итерируемого объекта точек. Если fx и fy не указаны, то points предполагается массивом двумерных массивов чисел: [[x0, y0], [x1, y1], …]. В противном случае, fx и fy являются функциями, которые вызываются для каждого элемента в массиве points, и должны возвращать соответствующие координаты x и y для каждой точки. Если that указано, функции fx и fy вызываются с that в качестве this. (См. Array.from для справки.)

const delaunay = Delaunay.from([[0, 0], [0, 1], [1, 0], [1, 1]]);
delaunay.points

Координаты точек в виде массива [x0, y0, x1, y1, …]. Как правило, это Float64Array, но вы можете использовать любой массив-подобный тип в конструкторе.

delaunay.halfedges

Индексы полуребер как Int32Array [j0, j1, …]. Для каждого индекса 0 ≤ i < halfedges.length, есть полуребро от вершины треугольника j = halfedges[i] до вершины треугольника i. Эквивалентно, это означает, что треугольник ⌊i / 3⌋ смежен с треугольником ⌊j / 3⌋. Если j отрицательно, то треугольник ⌊i / 3⌋ — это внешний треугольник на выпуклой оболочке. Например, чтобы отобразить внутренние рёбра триангуляции Делоне:

const {points, halfedges, triangles} = delaunay;
for (let i = 0, n = halfedges.length; i < n; ++i) {
  const j = halfedges[i];
  if (j < i) continue;
  const ti = triangles[i];
  const tj = triangles[j];
  context.moveTo(points[ti * 2], points[ti * 2 + 1]);
  context.lineTo(points[tj * 2], points[tj * 2 + 1]);
}

См. также delaunay.render.

delaunay.hull

Int32Array индексов точек, образующих выпуклую оболочку в против часовой стрелки. Если точки коллинеарны, возвращает их упорядоченные.

См. также delaunay.renderHull.

delaunay.triangles

Индексы вершин треугольников в виде Uint32Array [i0, j0, k0, i1, j1, k1, …]. Каждый последовательный тройка индексов i, j, k образует треугольник против часовой стрелки. Координаты точек треугольника можно найти, просмотрев delaunay.points. Например, чтобы отобразить треугольник i:

const {points, triangles} = delaunay;
const t0 = triangles[i * 3 + 0];
const t1 = triangles[i * 3 + 1];
const t2 = triangles[i * 3 + 2];
context.moveTo(points[t0 * 2], points[t0 * 2 + 1]);
context.lineTo(points[t1 * 2], points[t1 * 2 + 1]);
context.lineTo(points[t2 * 2], points[t2 * 2 + 1]);
context.closePath();

См. также delaunay.renderTriangle.

delaunay.inedges

Индексы входящих полуребер в виде Int32Array [e0, e1, e2, …]. Для каждой точки i, inedges[i] — это индекс полуребра e входящего полуребра. Для совпадающих точек индекс полуребра равен -1; для точек на выпуклой оболочке входящее полуребро находится на выпуклой оболочке; для других точек выбор входящего полуребра произвольный. Таблица inedges может быть использована для обхода триангуляции Делоне; см. также delaunay.neighbors.

delaunay.find(x, y[, i]) Источник

Возвращает индекс входной точки, ближайшей к заданной точке ⟨x, y⟩. Поиск начинается с указанной точки i. Если i не указан, он по умолчанию равен нулю.

delaunay.neighbors(i) Источник

Возвращает итерируемый объект индексов соседних точек заданной точки i. Итерируемый объект пуст, если i — совпадающая точка.

delaunay.render([context]) Источник

delaunay.render

Отображает рёбра триангуляции Делоне на указанный контекст. Указанный контекст должен реализовывать методы context.moveTo и context.lineTo из API CanvasPathMethods. Если контекст не указан, возвращается строка SVG-пути вместо этого.

delaunay.renderHull([context]) Источник

delaunay.renderHull

Отображает выпуклую оболочку триангуляции Делоне на указанный контекст. Указанный контекст должен реализовывать методы context.moveTo и context.lineTo из API CanvasPathMethods. Если контекст не указан, возвращается строка SVG-пути вместо этого.

delaunay.renderTriangle(i[, context]) Источник

delaunay.renderTriangle

Отображает треугольник i триангуляции Делоне на указанный контекст. Указанный контекст должен реализовывать методы context.moveTo, context.lineTo и context.closePath из API CanvasPathMethods. Если контекст не указан, возвращается строка SVG-пути вместо этого.

delaunay.renderPoints([context][, radius]) Источник

Отображает входные точки триангуляции Делоне на указанный контекст в виде окружностей с указанным радиусом. Если радиус не указан, он по умолчанию равен 2. Указанный контекст должен реализовывать методы context.moveTo и context.arc из API CanvasPathMethods. Если контекст не указан, возвращается строка SVG-пути вместо этого.

delaunay.hullPolygon() Источник

Возвращает замкнутый многоугольник [[x0, y0], [x1, y1], …, [x0, y0]] представляющий выпуклую оболочку.

delaunay.trianglePolygons() Источник

Возвращает итерируемый объект многоугольников для каждого треугольника, в порядке.

delaunay.trianglePolygon(i) Источник

Возвращает замкнутый многоугольник [[x0, y0], [x1, y1], [x2, y2], [x0, y0]] представляющий треугольник i.

delaunay.update() Источник

Обновляет триангуляцию после изменения точек на месте.

delaunay.voronoi([bounds]) Источник

Возвращает диаграмму Вороного для связанных точек. При отображении диаграмма будет обрезана до указанного bounds = [xmin, ymin, xmax, ymax]. Если bounds не указан, он по умолчанию равен [0, 0, 960, 500]. См. To Infinity and Back Again для интерактивного объяснения обрезки ячейки Вороного.

Диаграмма Вороного возвращается даже в вырожденных случаях, когда нет триангуляции — а именно 0, 1 или 2 точки, и коллинеарные точки.

Диаграмма Вороного

voronoi.delaunay

Связанная с диаграммой Вороного треугольная триангуляция Делоне.

voronoi.circumcenters

Окружные центры треугольников Делоне как Float64Array [cx0, cy0, cx1, cy1, …]. Каждая последовательная пара координат cx, cy — окружной центр соответствующего треугольника. Эти окружные центры образуют координаты многоугольников ячейки Вороного.

voronoi.vectors

Float64Array [vx0, vy0, wx0, wy0, …], где каждая ненулевая четверка описывает открытую (бесконечную) ячейку на внешней оболочке, давая направления двух открытых полупрямых.

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

Пределы области просмотра [xmin, ymin, xmax, ymax] для отрисовки диаграммы Вороного. Эти значения влияют только на методы отрисовки (voronoi.render, voronoi.renderBounds, cell.render).

voronoi.contains(i, x, y) Source

Возвращает true, если ячейка с указанным индексом i содержит указанную точку ⟨x, y⟩. (Этот метод не зависит от области просмотра ассоциированной диаграммы Вороного границы.)

voronoi.neighbors(i) Source

Возвращает итерируемый объект индексов ячеек, которые имеют общую грань с указанной ячейкой i. Соседние ячейки Вороного всегда являются соседями на графе Делоне, но обратное неверно, когда общая грань была обрезана областью просмотра диаграммы Вороного.

voronoi.render([context]) Source

voronoi.render

Отображает сетку ячеек Вороного в указанном context. Указанный context должен реализовывать методы context.moveTo и context.lineTo из API CanvasPathMethods. Если context не указан, вместо этого возвращается строка SVG пути.

voronoi.renderBounds([context]) Source

voronoi.renderBounds

Отображает границы области просмотра в указанном context. Указанный context должен реализовывать метод context.rect из API CanvasPathMethods. Эквивалентно context.rect(voronoi.xmin, voronoi.ymin, voronoi.xmax - voronoi.xmin, voronoi.ymax - voronoi.ymin). Если context не указан, вместо этого возвращается строка SVG пути.

voronoi.renderCell(i[, context]) Source

cell.render

Отображает ячейку с указанным индексом i в указанном context. Указанный context должен реализовывать методы context.moveTo, context.lineTo и context.closePath из CanvasPathMethods API. Если context не указан, вместо этого возвращается строка SVG пути.

voronoi.cellPolygons() Source

Возвращает итерируемый объект непустых многоугольников для каждой ячейки, с индексом ячейки в качестве свойства.

voronoi.cellPolygon(i) Source

Возвращает выпуклый, замкнутый многоугольник [[x0, y0], [x1, y1], …, [x0, y0]], представляющий ячейку для указанной точки i.

voronoi.update() Source

Обновляет диаграмму Вороного и базовую триангуляцию после изменения точек «in-place» — полезно для релаксации Ллойда.

© 2010–2020 Michael Bostock
Licensed under the BSD License.
https://github.com/d3/d3-delaunay

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API