Преобразование force
Преобразование force рассчитывает размещение узлов под действием сил. В модели объекты данных выступают заряженными частицами (узлами), которые при необходимости соединяются рёбрами (связями). Набор сил управляет физической симуляцией и определяет положения узлов. Используется библиотека d3-force.
Чтобы закрепить узел в определённом месте, задайте у него два специальных поля:
fx— фиксированная координата X узла;fy— фиксированная координата Y узла.
Преобразование force изменяет только входные данные узлов. Свойства связей оно не меняет. Для объединения узлов со связями используйте lookup, а затем разместите линии преобразованием linkpath.
Пример
Параметры преобразования
| Свойство | Тип | Описание |
|---|---|---|
| static | Boolean | Вычислять ли симуляцию сразу для статического размещения (true) или анимировать её (false, по умолчанию). |
| restart | Boolean | Перезапускать ли симуляцию при изменении полей узла (по умолчанию false). |
| iterations | Number | Число шагов симуляции в режиме static (по умолчанию 300). |
| alpha | Number | Текущий уровень энергии, или «температура», симуляции от 0 до 1. Со временем значение уменьшается, и перемещения узлов становятся меньше. |
| alphaMin | Number | Порог уровня alpha, ниже которого анимированная симуляция останавливается (по умолчанию 0.001). |
| alphaTarget | Number | Целевое значение alpha, к которому стремится симуляция (по умолчанию 0). |
| velocityDecay | Number | Затухание скорости, похожее на сопротивление среды. После применения сил скорость каждого узла умножается на 1 - velocityDecay (по умолчанию 0.4). |
| forces | Сила[ ] | Массив объектов, описывающих силы симуляции. См. справочник сил. |
| as | String[ ] | Имена выходных полей для координат и скоростей узлов (по умолчанию ["x", "y", "vx", "vy"]). |
Справочник сил
# center
Сила, притягивающая все узлы к общей точке с координатами [x, y].
| Свойство | Тип | Описание |
|---|---|---|
| force | String | Значение "center". |
| x | Number | Координата X общего центра. |
| y | Number | Координата Y общего центра. |
# collide
Сила столкновения, отталкивающая узлы, если их круговые области перекрываются.
| Свойство | Тип | Описание |
|---|---|---|
| force | String | Значение "collide". |
| radius | Number | Expr | Радиус узла. |
| strength | Number | Относительная сила отталкивания (по умолчанию 0.7). |
| iterations | Number | Число шагов проверки столкновений (по умолчанию 1). |
# nbody
Сила взаимодействия многих тел, вызывающая притяжение или отталкивание узлов.
| Свойство | Тип | Описание |
|---|---|---|
| force | String | Значение "nbody". |
| strength | Number | Expr | Относительная сила взаимодействия (по умолчанию -30). Отрицательные значения вызывают отталкивание, положительные — притяжение. |
| theta | Number | Параметр приближения для суммирования влияния удалённых узлов (по умолчанию 0.9). |
| distanceMin | Number | Минимальное расстояние действия силы (по умолчанию 1). Если узлы расположены ближе, взаимодействие рассчитывается так, будто они находятся на расстоянии distanceMin. |
| distanceMax | Number | Максимальное расстояние действия силы. Более удалённые узлы не влияют друг на друга. |
# link
Ограничения связей стремятся привести расстояние между узлами к заданному значению. Объекты связей должны находиться в отдельном потоке и содержать поля source и target. Если задано поле id, оно сопоставляет связи с узлами. Иначе source и target должны содержать индексы в массиве узлов.
| Свойство | Тип | Описание |
|---|---|---|
| force | String | Значение "link". |
| links | Data | Набор данных со связями. Каждый объект должен содержать поля source и target, указывающие на узлы. |
| id | Field | Необязательное поле с уникальным идентификатором узла. Если задано, поля source и target у связей должны содержать такие идентификаторы. |
| distance | Number | Expr | Желаемое расстояние между связанными узлами в пикселях (по умолчанию 30). |
| strength | Number | Expr | Относительная сила ограничения связи. |
| iterations | Number | Число шагов применения ограничений связей (по умолчанию 1). |
# x
Притягивает каждый узел к заданной для него координате X.
| Свойство | Тип | Описание |
|---|---|---|
| force | String | Значение "x". |
| x | Field | Координата X, к которой притягивается узел. |
| strength | Number | Относительная сила притяжения (по умолчанию 0.1). |
# y
Притягивает каждый узел к заданной для него координате Y.
| Свойство | Тип | Описание |
|---|---|---|
| force | String | Значение "y". |
| y | Field | Координата Y, к которой притягивается узел. |
| strength | Number | Относительная сила притяжения (по умолчанию 0.1). |
Использование
{
"type": "force",
"forces": [
{
"force": "center",
"x": {"signal": "width / 2"},
"y": {"signal": "height / 2"}
},
{
"force": "nbody",
"strength": -10
},
{
"force": "link",
"links": "edges",
"distance": 25
},
{
"force": "collide",
"radius": 10
}
]
}
Рассчитывает размещение сети под действием сил. Центр размещения совпадает с серединой представления; узлы отталкиваются, а набор edges задаёт связи с желаемым расстоянием 25 пикселей. Также проверяются столкновения кругов радиусом 10 пикселей.
{
"type": "force",
"static": true,
"forces": [
{
"force": "x",
"x": "xfocus"
},
{
"force": "y",
"y": "yfocus"
},
{
"force": "collide",
"radius": {"field": "radius"}
}
]
}
Рассчитывает диаграмму роя. Каждый узел притягивается к точке [x, y] из полей xfocus и yfocus. При проверке столкновений радиус берётся из поля radius каждого узла.