Преобразование 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 каждого узла.