Диаграмма Вороного представляет собой разбиение плоскости на области влияния точек-наблюдателей. Каждая область содержит все точки пространства, которые находятся ближе к соответствующему генератору, чем к любому другому. Формально, для множества точек ( P = {p_1, p_2, …, p_n} ) каждая область определяется как:
V(p_i)={x ^2 d(x,p_i) d(x,p_j), j i}
В контексте Vega и Vega-Lite эта конструкция используется для пространственного разбиения визуализаций, чаще всего на основе scatter plot, heatmap-подобных структур и интерактивных карт влияния.
В Vega трансформация voronoi относится к набору
геометрических преобразований, которые создают полигоны влияния на
основе входных координат. Исходными данными являются точки с
координатами x и y, а результатом — набор
полигонов, описывающих области ближайшего соседа.
Базовая структура трансформации:
{
"transform": [
{
"type": "voronoi",
"x": "x",
"y": "y",
"size": [width, height]
}
]
}
Каждый параметр определяет ключевую часть вычисления:
Результатом трансформации является множество многоугольников, каждый из которых соответствует одной исходной точке. Эти многоугольники формируют планарное разбиение, где каждая точка пространства однозначно принадлежит одному полигону.
Внутренне Vega использует вычисление через триангуляцию Делоне, после чего строит двойственную к ней структуру — диаграмму Вороного. Это обеспечивает:
x / y Определяют координаты точек. Могут быть числовыми полями данных или выражениями.
size Определяет прямоугольную область вычисления:
"size": [width, height]
При отсутствии используется viewport сцены.
extent Альтернативное задание границ:
"extent": [[x0, y0], [x1, y1]]
Используется при работе с вложенными или смещёнными системами координат.
as Позволяет задать имя выходного поля:
"as": "cell"
После применения трансформации каждая точка получает ассоциированный полигон. Структура данных обычно включает:
Пример результата:
{
"x": 120,
"y": 80,
"cell": [
[100, 50],
[140, 60],
[130, 100],
[90, 90]
]
}
Эта структура позволяет напрямую использовать данные в
shape или path mark.
Vega-Lite не всегда экспонирует voronoi как
высокоуровневую трансформацию напрямую, однако при компиляции
спецификации в Vega возможно включение данного этапа через расширенные
transform-блоки.
Типичный сценарий применения:
Пример логической структуры Vega-Lite:
{
"data": {"name": "points"},
"mark": "circle",
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y", "type": "quantitative"}
},
"transform": [
{
"type": "voronoi",
"x": "x",
"y": "y",
"size": [500, 400],
"as": "cell"
}
]
}
Основное применение диаграммы Вороного в Vega — расширение области взаимодействия.
Без Voronoi взаимодействие ограничивается точечными координатами, что делает hover-события нестабильными при малом размере маркеров. После добавления Voronoi каждая точка получает расширенную зону чувствительности.
Схема взаимодействия:
Это позволяет:
Внутренний алгоритм строится через двойственность:
(P) = ((P))
Триангуляция Делоне обеспечивает разбиение на треугольники с максимизацией минимальных углов, после чего центры описанных окружностей треугольников формируют вершины диаграммы Вороного.
При увеличении числа точек сложность построения возрастает, поскольку требуется обработка соседских отношений.
Основные характеристики:
Оптимизация в Vega включает:
Voronoi часто используется как скрытый слой поверх визуализации:
{
"mark": "path",
"from": {"data": "points"},
"encode": {
"enter": {
"path": {"field": "cell"},
"fill": {"value": "transparent"}
},
"hover": {
"fill": {"value": "rgba(0,0,0,0.05)"}
}
}
}
Такой слой не отображает границы, но служит для обработки событий.
Voronoi часто используется совместно с:
Порядок трансформаций критичен, так как Voronoi требует уже финальных координат.
Неправильные границы extent При отсутствии корректного extent полигоны могут обрезаться или выходить за пределы визуализации.
Использование нечисловых координат Voronoi требует
строгих числовых значений x и y.
Смешивание координатных систем При наличии масштабирования (scale) до Voronoi результат может искажаться.
Игнорирование плотности точек При высокой плотности точек полигоны становятся слишком малыми для практического взаимодействия.
Расширение hit-testing Используется для превращения точечных визуализаций в регионально-интерактивные.
Сегментация пространства влияния Применяется в аналитике распределений, геоданных, кластеризации визуальных данных.
Подложка для heatmap-поверхностей Voronoi используется как дискретизация непрерывных полей.
Гибридные визуализации Комбинируется с линиями, потоками и плотностными картами для создания многослойных графиков.
Voronoi-трансформация находится на уровне геометрических вычислений, между data pipeline и rendering pipeline. Она не является декоративной операцией, а формирует структурный слой данных, влияющий на логику взаимодействия и форму последующего рендера.