Spec-Zone.ru › D3.js 6

d3-force

Этот модуль реализует численный интегратор Верелета для моделирования физических сил на частицах. Моделирование упрощено: оно предполагает постоянный единичный временной шаг Δt = 1 для каждого шага и постоянную единичную массу m = 1 для всех частиц. В результате сила F, действующая на частицу, эквивалентна постоянному ускорению a в течение временного интервала Δt и может быть смоделирована просто добавлением к скорости частицы, которая затем добавляется к положению частицы.

В области визуализации информации физические симуляции полезны для изучения сетей и иерархий!

Force-Directed GraphForce-Directed Tree

Вы также можете моделировать круги (диски) с учетом столкновений, например, для диаграмм пузырьков или диаграмм «пчелиных роев»:

Collision DetectionBeeswarm

Вы даже можете использовать его как примитивный физический движок, например, для моделирования ткани:

Force-Directed Lattice

Для использования этого модуля создайте симуляцию для массива узлов и составьте желаемые силы. Затем подпишитесь на события тика, чтобы отобразить узлы по мере обновления в вашей предпочтительной системе графики, например, Canvas или SVG.

Установка

Если вы используете NPM, npm install d3-force. В противном случае загрузите последнюю версию. Вы также можете загрузить напрямую с d3js.org, либо как отдельный библиотеку, либо как часть D3. Поддерживаются среды AMD, CommonJS и vanilla. В vanilla экспортируется d3_force глобальная переменная:

<script src="https://d3js.org/d3-dispatch.v2.min.js"></script>
<script src="https://d3js.org/d3-quadtree.v2.min.js"></script>
<script src="https://d3js.org/d3-timer.v2.min.js"></script>
<script src="https://d3js.org/d3-force.v2.min.js"></script>
<script>

var simulation = d3.forceSimulation(nodes);

</script>

Попробуйте d3-force в вашем браузере.

Справочник API

Моделирование

d3.forceSimulation([nodes]) · Источник

Создает новую симуляцию со заданным массивом узлов и без сил. Если узлы не указаны, по умолчанию используется пустой массив. Симулятор запускается автоматически; используйте симуляция.on, чтобы подписываться на события тика по мере выполнения симуляции. Если вы хотите запустить симуляцию вручную, вызовите симуляция.stop, а затем вызовите симуляция.tick по мере необходимости.

simulation.restart() · Источник

Перезапускает внутренний таймер симуляции и возвращает симуляцию. В сочетании с симуляция.alphaTarget или симуляция.alpha этот метод может использоваться для «подогрева» симуляции во время взаимодействия, например, при перетаскивании узла, или для возобновления симуляции после временной остановки с помощью симуляция.stop.

simulation.stop() · Источник

Останавливает внутренний таймер симуляции, если он запущен, и возвращает симуляцию. Если таймер уже остановлен, этот метод ничего не делает. Этот метод полезен для ручного запуска симуляции; см. симуляция.tick.

simulation.tick([iterations]) · Источник

Вручную выполняет шаг симуляции на указанное количество итераций и возвращает симуляцию. Если итераций не указано, по умолчанию используется 1 (один шаг).

Для каждой итерации текущий альфа увеличивается на (целевое значение альфа - альфа) × скорость затухания альфа; затем вызывается каждый зарегистрированный усилие, передавая новое значение альфа; затем скорость каждого узла уменьшается на скорость × скорость затухания скорости; наконец, положение каждого узла увеличивается на скорость.

Этот метод не отправляет события; события отправляются только внутренним таймером, когда симуляция запускается автоматически при создании или при вызове симуляция.restart. Естественное количество тиков при запуске симуляции равно ⌈log(минимальное альфа) / log(1 - скорость затухания альфа)⌉; по умолчанию это 300.

Этот метод можно использовать совместно с симуляция.stop для вычисления статического макета силы. Для больших графов статические макеты должны быть вычислены в веб-рабочем потоке, чтобы избежать зависания пользовательского интерфейса.

simulation.nodes([nodes]) · Источник

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

Каждый узел должен быть объектом. Следующие свойства назначаются симуляцией:

  • index - индекс узла в массиве узлы
  • x - текущая позиция узла по оси x
  • y - текущая позиция узла по оси y
  • vx - текущая скорость узла по оси x
  • vy - текущая скорость узла по оси y

Положение ⟨x,y⟩ и скорость ⟨vx,vy⟩ могут быть изменены силами и симуляцией. Если vx или vy равно NaN, скорость инициализируется как ⟨0,0⟩. Если x или y равно NaN, положение инициализируется в упорядочивании филлотаксиса, чтобы обеспечить детерминированное, равномерное распределение.

Чтобы зафиксировать узел в заданном положении, можно указать два дополнительных свойства:

  • fx - фиксированная позиция узла по оси x
  • fy - фиксированная позиция узла по оси y

В конце каждого тика, после применения всех сил, узел с определенным node.fx имеет node.x сброшенное до этого значения, а node.vx установлено в ноль; аналогично, узел с определенным node.fy имеет node.y сброшенное до этого значения, а node.vy установлено в ноль. Чтобы разфиксировать узел, который ранее был зафиксирован, установите node.fx и node.fy в null или удалите эти свойства.

Если заданный массив узлов изменяется, например, когда узлы добавляются или удаляются из симуляции, этот метод должен быть вызван снова с новым (или измененным) массивом, чтобы уведомить симуляцию и привязанные силы об изменении; симуляция не создает защитную копию указанного массива.

simulation.alpha([alpha]) · Источник

альфа примерно аналогичен температуре в симулированном отжиге. Он уменьшается со временем, по мере «охлаждения» симуляции. Когда альфа достигает alphaMin, симуляция останавливается; см. симуляция.restart.

Если альфа указано, устанавливает текущую альфа в заданное число в диапазоне [0,1] и возвращает эту симуляцию. Если альфа не указано, возвращает текущее значение альфа, которое по умолчанию равно 1.

simulation.alphaMin([min]) · Источник

Если min указано, устанавливает минимальное альфа в заданное число в диапазоне [0,1] и возвращает эту симуляцию. Если min не указано, возвращает текущее минимальное значение альфа, которое по умолчанию равно 0,001. Внутренний таймер симуляции останавливается, когда текущее альфа меньше минимального альфа. Стандартная скорость затухания альфа ~0,0228 соответствует 300 итерациям.

simulation.alphaDecay([decay]) · Источник

Если decay указано, устанавливает скорость затухания альфа в заданное число в диапазоне [0,1] и возвращает эту симуляцию. Если decay не указано, возвращает текущую скорость затухания альфа, которая по умолчанию равна 0,0228… = 1 - pow(0,001, 1 / 300), где 0,001 - стандартное минимальное альфа.

Скорость затухания альфа определяет, как быстро текущее значение альфа интерполируется к целевому целевому альфа; поскольку целевое значение альфа по умолчанию равно нулю, по умолчанию это управляет тем, как быстро симуляция охлаждается. Более высокие значения скорости затухания приводят к более быстрому стабилизации симуляции, но могут привести к застреванию в локальном минимуме; меньшие значения заставляют симуляцию работать дольше, но, как правило, сходятся к лучшему макету. Чтобы симуляция работала вечно с текущей альфа, установите скорость затухания в ноль; или установите целевое значение альфа больше минимального значения альфа.

simulation.alphaTarget([target]) · Источник

Если параметр target указан, устанавливает текущую целевую величину alpha до указанного числа в диапазоне [0,1] и возвращает эту симуляцию. Если target не указан, возвращает текущее целевое значение alpha, которое по умолчанию равно 0.

simulation.velocityDecay([decay]) · Source

Если параметр decay указан, устанавливает коэффициент затухания скорости до указанного числа в диапазоне [0,1] и возвращает эту симуляцию. Если decay не указан, возвращает текущий коэффициент затухания скорости, который по умолчанию равен 0,4. Коэффициент затухания аналогичен атмосферному трению; после применения любых сил во время шага скорость каждого узла умножается на 1 - decay. Как и при снижении скорости затухания alpha, меньшее затухание скорости может привести к лучшему решению, но увеличивает риск числовых неустойчивостей и колебаний.

simulation.force(name[, force]) · Source

Если force указан, назначает силу для указанного name и возвращает эту симуляцию. Если force не указан, возвращает силу с указанным именем или undefined, если такой силы нет. (По умолчанию новые симуляции не имеют сил.) Например, чтобы создать новую симуляцию для компоновки графа, можно сказать:

var simulation = d3.forceSimulation(nodes)
    .force("charge", d3.forceManyBody())
    .force("link", d3.forceLink(links))
    .force("center", d3.forceCenter());

Чтобы удалить силу с заданным name, передайте null в качестве force. Например, чтобы удалить силу заряда:

simulation.force("charge", null);
simulation.find(x, y[, radius]) · Source

Возвращает узел, ближайший к позиции ⟨x,y⟩ с заданным радиусом поиска radius. Если radius не указан, он по умолчанию равен бесконечности. Если в области поиска нет узла, возвращает undefined.

simulation.randomSource([source]) Source)

Если source указан, устанавливает функцию, используемую для генерации случайных чисел; это должна быть функция, которая возвращает число от 0 (включительно) до 1 (исключительно). Если source не указан, возвращает текущий источник случайных чисел симуляции, который по умолчанию является линейным конгруэнтным генератором с фиксированным начальным значением. См. также random.source.

simulation.on(typenames, [listener]) · Source

Если listener указан, устанавливает обработчик события listener для указанных typenames и возвращает эту симуляцию. Если обработчик события уже был зарегистрирован для того же типа и имени, существующий обработчик удаляется перед добавлением нового. Если listener равен null, удаляются текущие обработчики событий для указанных typenames, если таковые имеются. Если listener не указан, возвращает первый текущий обработчик, соответствующий указанным typenames, если таковой имеется. При срабатывании указанного события каждый listener вызывается с контекстом this в качестве симуляции.

typenames — строка, содержащая одно или несколько typename, разделенных пробелами. Каждое typename — это type, необязательно с точкой (.) и name, например tick.foo и tick.bar; имя позволяет регистрировать несколько обработчиков для одного и того же type. type должен быть одним из следующих:

  • tick — после каждого шага (tick) внутреннего таймера симуляции.
  • end — после остановки таймера симуляции, когда alpha < alphaMin.

Обратите внимание, что события tick не отправляются, когда simulation.tick вызывается вручную; события отправляются только внутренним таймером и предназначены для интерактивного отображения симуляции. Чтобы повлиять на симуляцию, зарегистрируйте силы, а не изменяйте позиции или скорости узлов внутри обработчика события tick.

См. dispatch.on для получения подробной информации.

Силы

Сила — это просто функция, которая изменяет позиции или скорости узлов; в этом контексте сила может применять классическую физическую силу, такую как электрический заряд или гравитация, или может разрешать геометрическое ограничение, например, удерживать узлы в пределах области или удерживать связанные узлы на фиксированном расстоянии друг от друга. Например, простая сила позиционирования, которая перемещает узлы к началу координат ⟨0,0⟩, может быть реализована следующим образом:

function force(alpha) {
  for (var i = 0, n = nodes.length, node, k = alpha * 0.1; i < n; ++i) {
    node = nodes[i];
    node.vx -= node.x * k;
    node.vy -= node.y * k;
  }
}

Силы обычно считывают текущую позицию узла ⟨x,y⟩, а затем добавляют (или вычитают) к скорости узла ⟨vx,vy⟩. Однако силы также могут «заглядывать вперёд» в ожидаемую следующую позицию узла ⟨x + vx,y + vy⟩; это необходимо для разрешения геометрических ограничений с помощью итеративного релаксации. Силы также могут напрямую изменять позицию, что иногда бывает полезно для предотвращения добавления энергии в симуляцию, например, при центрировании симуляции в области просмотра.

Симуляции обычно комбинируют несколько сил по мере необходимости. Этот модуль предоставляет несколько для вашего использования:

  • Центрирование
  • Столкновения
  • Связи
  • Взаимодействие многих тел
  • Позиционирование

Силы могут по желанию реализовать force.initialize для получения массива узлов симуляции.

force(alpha) · Source

Применяет эту силу, необязательно учитывая указанный alpha. Обычно сила применяется к массиву узлов, ранее переданному в force.initialize, однако некоторые силы могут применяться к подмножеству узлов или вести себя иначе. Например, d3.forceLink применяется к источнику и цели каждой связи.

force.initialize(nodes) · Source

Предоставляет массив nodes и источник random для этой силы. Этот метод вызывается, когда сила привязана к симуляции через simulation.force и когда узлы симуляции изменяются через simulation.nodes. Сила может выполнить необходимую работу во время инициализации, например, вычислить параметры каждого узла, чтобы избежать многократного выполнения работы во время каждого применения силы.

Центрирование

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

d3.forceCenter([x, y]) · Source

Создаёт новую центрирующую силу с заданными координатами x- и y-. Если x и y не указаны, они по умолчанию равны ⟨0,0⟩.

center.x([x]) · Source

Если x указан, устанавливает координату x центрированной позиции на указанное число и возвращает эту силу. Если x не указан, возвращает текущую координату x, которая по умолчанию равна нулю.

center.y([y]) · Source

Если y указан, устанавливает координату y центрированной позиции на указанное число и возвращает эту силу. Если y не указан, возвращает текущую координату y, которая по умолчанию равна нулю.

center.strength([strength]) · Source, Примеры

Если strength указан, устанавливает силу центрирования. Уменьшенная сила, например 0,05, смягчает движения на интерактивных графах, в которые входят или выходят новые узлы. Если strength не указан, возвращает текущую силу, которая по умолчанию равна 1.

Столкновения

Сила столкновения рассматривает узлы как окружности с заданным радиусом, а не как точки, и предотвращает перекрытие узлов. Более формально, два узла a и b разделяются так, что расстояние между a и b не меньше radius(a) + radius(b). Для уменьшения дрожания это по умолчанию «мягкое» ограничение с настраиваемой силой и количеством итераций.

d3.forceCollide([radius]) · Source

Создает новую силу кругового столкновения с указанным радиусом. Если radius не указан, он по умолчанию равен константе для всех узлов.

collide.radius([radius]) · Source

Если radius указан, устанавливает доступ к радиусу к указанному числу или функции, повторно вычисляет доступ к радиусу для каждого узла и возвращает эту силу. Если radius не указан, возвращает текущий доступ к радиусу, который по умолчанию равен:

function radius() {
  return 1;
}

Доступ к радиусу вызывается для каждого узла в симуляции, передавая узел и его нулевой индекс. Результирующее число затем сохраняется внутри, так что радиус каждого узла пересчитывается только при инициализации силы или при вызове этого метода с новым radius, а не при каждом применении силы.

collide.strength([strength]) · Source

Если strength указано, устанавливает силу отталкивания узлов к указанному числу в диапазоне [0,1] и возвращает эту силу. Если strength не указано, возвращает текущую силу, которая по умолчанию равна 1.

Перекрывающиеся узлы разрешаются с помощью итеративного расслабления. Для каждого узла определяются другие узлы, которые, как ожидается, перекроются на следующей итерации (используя ожидаемые координаты ⟨x + vx,y + vy⟩); скорость узла затем изменяется, чтобы отодвинуть его от каждого перекрывающегося узла. Изменение скорости смягчается силой отталкивания, таким образом, разрешение одновременных перекрытий может быть объединен для поиска стабильного решения.

collide.iterations([iterations]) · Source

Если iterations указано, устанавливает количество итераций на одно применение к указанному числу и возвращает эту силу. Если iterations не указано, возвращает текущее значение количества итераций, которое по умолчанию равно 1. Увеличение количества итераций значительно повышает жёсткость ограничения и предотвращает частичное перекрытие узлов, но также увеличивает временные затраты на оценку силы.

Связи

Сила связи перемещает связанные узлы вместе или врозь в соответствии с желаемой длиной связи. Сила силы пропорциональна разнице между расстоянием между связанными узлами и целевым расстоянием, аналогично силе пружины.

d3.forceLink([links]) · Source

Создаёт новую силу связи со специфицированными links и параметрами по умолчанию. Если links не указано, оно по умолчанию равно пустому массиву.

link.links([links]) · Source

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

Каждая связь — это объект со следующими свойствами:

  • source - исходный узел связи; см. simulation.nodes
  • target - целевой узел связи; см. simulation.nodes
  • index - индекс (от 0) в links, назначенный этим методом

Для удобства свойства source и target связи могут быть инициализированы с помощью числовых или строковых идентификаторов вместо ссылок на объекты; см. link.id. При инициализации силы связи (или повторной инициализации, например, при изменении узлов или связей), любое свойство link.source или link.target, которое не является объектом, заменяется ссылкой на соответствующий узел с данным идентификатором.

Если указанный массив links изменяется, например, при добавлении или удалении связей из симуляции, этот метод необходимо вызвать снова с новым (или изменённым) массивом, чтобы уведомить силу о изменении; сила не создаёт защитную копию указанного массива.

link.id([id]) · Source

Если id указано, устанавливает доступ к идентификатору узла к указанной функции и возвращает эту силу. Если id не указано, возвращает текущую функцию доступа к идентификатору узла, которая по умолчанию равна числовому значению node.index:

function id(d) {
  return d.index;
}

Функция доступа по умолчанию позволяет указывать исходный и целевой узлы каждой связи в виде индекса (от 0) в массиве узлов. Например:

var nodes = [
  {"id": "Alice"},
  {"id": "Bob"},
  {"id": "Carol"}
];

var links = [
  {"source": 0, "target": 1}, // Alice → Bob
  {"source": 1, "target": 2} // Bob → Carol
];

Теперь рассмотрим другую функцию доступа к идентификатору, которая возвращает строку:

function id(d) {
  return d.id;
}

С этой функцией доступа можно использовать именованные источники и цели:

var nodes = [
  {"id": "Alice"},
  {"id": "Bob"},
  {"id": "Carol"}
];

var links = [
  {"source": "Alice", "target": "Bob"},
  {"source": "Bob", "target": "Carol"}
];

Это особенно полезно при представлении графов в формате JSON, так как JSON не позволяет использовать ссылки. См. этот пример.

Функция доступа к идентификатору вызывается для каждого узла всякий раз, когда сила инициализируется, как при изменении узлов или связей, получая узел и его индекс (от 0).

link.distance([distance]) · Source

Если distance указано, устанавливает функцию доступа к расстоянию к указанному числу или функции, переоценивает функцию доступа к расстоянию для каждой связи и возвращает эту силу. Если distance не указано, возвращает текущую функцию доступа к расстоянию, которая по умолчанию:

function distance() {
  return 30;
}

Функция доступа к расстоянию вызывается для каждой связи, получая связь и её нулевой индекс. Полученное число затем хранится во внутренней области, таким образом, расстояние каждой связи пересчитывается только при инициализации силы или при вызове этого метода с новым distance, а не при каждом применении силы.

link.strength([strength]) · Source

Если strength указано, устанавливает функцию доступа к силе к указанному числу или функции, переоценивает функцию доступа к силе для каждой связи и возвращает эту силу. Если strength не указано, возвращает текущую функцию доступа к силе, которая по умолчанию:

function strength(link) {
  return 1 / Math.min(count(link.source), count(link.target));
}

Где count(node) — функция, возвращающая количество связей, имеющих данный узел в качестве источника или цели. Этот параметр по умолчанию был выбран, потому что он автоматически уменьшает силу связей, подключенных к узлам с большим количеством связей, улучшая стабильность.

Функция доступа к силе вызывается для каждой связи, получая связь и её нулевой индекс. Полученное число затем хранится во внутренней области, таким образом, сила каждой связи пересчитывается только при инициализации силы или при вызове этого метода с новым strength, а не при каждом применении силы.

link.iterations([iterations]) · Source

Если iterations указано, устанавливает количество итераций на одно применение к указанному числу и возвращает эту силу. Если iterations не указано, возвращает текущее значение количества итераций, которое по умолчанию равно 1. Увеличение количества итераций значительно повышает жёсткость ограничения и полезно для сложных структур, таких как решётки, но также увеличивает временные затраты на оценку силы.

Многотел

Сила многих тел (или сила n-тел) действует взаимно между всеми узлами. Она может использоваться для моделирования гравитации (притяжения), если сила положительна, или электростатического заряда (отталкивания), если сила отрицательна. Эта реализация использует квадродеревья и приближение Барнса–Хьюта для значительного повышения производительности; точность может быть настроена с помощью параметра theta.

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

d3.forceManyBody() · Source

Создаёт новую силу многих тел с параметрами по умолчанию.

manyBody.strength([strength]) · Source

Если strength указано, устанавливает функцию доступа к силе к указанному числу или функции, переоценивает функцию доступа к силе для каждого узла и возвращает эту силу. Положительное значение заставляет узлы притягиваться друг к другу, как гравитация, а отрицательное значение — отталкиваться, как электростатический заряд. Если strength не указано, возвращает текущую функцию доступа к силе, которая по умолчанию:

function strength() {
  return -30;
}

Функция доступа к силе вызывается для каждого узла в симуляции, получая узел и его нулевой индекс. Полученное число затем хранится во внутренней области, таким образом, сила каждого узла пересчитывается только при инициализации силы или при вызове этого метода с новым strength, а не при каждом применении силы.

manyBody.theta([theta]) · Source

Если theta указано, устанавливает критерий приближения Барнса–Хьюта к указанному числу и возвращает эту силу. Если theta не указано, возвращает текущее значение, которое по умолчанию равно 0,9.

Для ускорения вычислений эта сила реализует приближение Барнса–Хьюта, которое имеет сложность O(n log n) на каждое применение, где n — количество узлов. На каждом применении, квадродерево хранит текущие координаты узлов; затем для каждого узла вычисляется комбинированная сила всех других узлов на данный узел. Для группы узлов, которые находятся далеко, сила заряда может быть аппроксимирована путём обработки группы как одного, более крупного узла. Параметр theta определяет точность приближения: если отношение w / l ширины w ячейки квадродерева к расстоянию l от узла до центра масс ячейки меньше theta, все узлы в данной ячейке обрабатываются как один узел, а не индивидуально.

manyBody.distanceMin([distance]) · Source

Если distance указано, устанавливает минимальное расстояние между узлами, при котором рассматривается эта сила. Если distance не указано, возвращает текущее минимальное расстояние, которое по умолчанию равно 1. Минимальное расстояние устанавливает верхнюю границу силы между двумя близкими узлами, предотвращая нестабильность. В частности, это предотвращает бесконечно сильную силу, если два узла находятся точно на одной точке; в этом случае направление силы случайное.

manyBody.distanceMax([distance]) · Source

Если задано расстояние, устанавливает максимальное расстояние между узлами, при котором эта сила учитывается. Если расстояние не задано, возвращает текущее максимальное расстояние, которое по умолчанию равно бесконечности. Указание конечного максимального расстояния повышает производительность и создает более локализованную компоновку.

Позиционирование

Силы позиционирования по x- и y-осям перемещают узлы к желаемой позиции вдоль заданной оси с настраиваемой силой. Сила radial аналогична, за исключением того, что она перемещает узлы к ближайшей точке на заданной окружности. Сила пропорциональна одномерному расстоянию между позицией узла и целевой позицией. Хотя эти силы могут использоваться для позиционирования отдельных узлов, они предназначены в первую очередь для глобальных сил, которые применяются ко всем (или большинству) узлов.

d3.forceX([x]) · Источник

Создаёт новую силу позиционирования вдоль оси x в направлении заданной позиции x. Если x не указано, оно по умолчанию равно 0.

x.strength([strength]) · Источник

Если задано strength, устанавливает функцию для доступа к силе к заданному числу или функции, пересчитывает силу для каждого узла и возвращает эту силу. strength определяет, насколько необходимо увеличить скорость узла по x: (x - node.x) × strength. Например, значение 0,1 означает, что узел должен сместиться на одну десятую от текущей позиции по x к целевой позиции по x при каждом применении. Более высокие значения перемещают узлы быстрее к целевой позиции, но часто за счёт других сил или ограничений. Не рекомендуется использовать значения вне диапазона [0,1].

Если strength не задано, возвращает текущую функцию доступа к силе, которая по умолчанию:

function strength() {
  return 0.1;
}

Функция доступа к силе вызывается для каждого узла в симуляции, принимая узел и его нулевой индекс. Полученное число затем сохраняется внутри, таким образом, сила каждого узла пересчитывается только при инициализации силы или при вызове этого метода с новым strength, а не при каждом применении силы.

x.x([x]) · Источник

Если задано x, устанавливает функцию для доступа к координате x к заданному числу или функции, пересчитывает координату x для каждого узла и возвращает эту силу. Если x не указано, возвращает текущую функцию доступа к x, которая по умолчанию:

function x() {
  return 0;
}

Функция доступа к x вызывается для каждого узла в симуляции, принимая узел и его нулевой индекс. Полученное число затем сохраняется внутри, таким образом, целевая координата x каждого узла пересчитывается только при инициализации силы или при вызове этого метода с новым x, а не при каждом применении силы.

d3.forceY([y]) · Источник

Создаёт новую силу позиционирования вдоль оси y в направлении заданной позиции y. Если y не указано, оно по умолчанию равно 0.

y.strength([strength]) · Источник

Если задано strength, устанавливает функцию доступа к силе к заданному числу или функции, пересчитывает силу для каждого узла и возвращает эту силу. strength определяет, насколько необходимо увеличить скорость узла по y: (y - node.y) × strength. Например, значение 0,1 означает, что узел должен сместиться на одну десятую от текущей позиции по y к целевой позиции по y при каждом применении. Более высокие значения перемещают узлы быстрее к целевой позиции, но часто за счёт других сил или ограничений. Не рекомендуется использовать значения вне диапазона [0,1].

Если strength не задано, возвращает текущую функцию доступа к силе, которая по умолчанию:

function strength() {
  return 0.1;
}

Функция доступа к силе вызывается для каждого узла в симуляции, принимая узел и его нулевой индекс. Полученное число затем сохраняется внутри, таким образом, сила каждого узла пересчитывается только при инициализации силы или при вызове этого метода с новым strength, а не при каждом применении силы.

y.y([y]) · Источник

Если задано y, устанавливает функцию доступа к координате y к заданному числу или функции, пересчитывает координату y для каждого узла и возвращает эту силу. Если y не указано, возвращает текущую функцию доступа к y, которая по умолчанию:

function y() {
  return 0;
}

Функция доступа к y вызывается для каждого узла в симуляции, принимая узел и его нулевой индекс. Полученное число затем сохраняется внутри, таким образом, целевая координата y каждого узла пересчитывается только при инициализации силы или при вызове этого метода с новым y, а не при каждом применении силы.

d3.forceRadial(radius[, x][, y]) · Источник

Radial Force

Создаёт новую силу позиционирования к окружности заданного радиуса с центром в точке ⟨x,y⟩. Если x и y не указаны, они по умолчанию равны ⟨0,0⟩.

radial.strength([strength]) · Источник

Если задано strength, устанавливает функцию доступа к силе к заданному числу или функции, пересчитывает силу для каждого узла и возвращает эту силу. strength определяет, насколько необходимо увеличить скорость узла по x и y. Например, значение 0,1 означает, что узел должен сместиться на одну десятую от текущей позиции к ближайшей точке на окружности при каждом применении. Более высокие значения перемещают узлы быстрее к целевой позиции, но часто за счёт других сил или ограничений. Не рекомендуется использовать значения вне диапазона [0,1].

Если strength не задано, возвращает текущую функцию доступа к силе, которая по умолчанию:

function strength() {
  return 0.1;
}

Функция доступа к силе вызывается для каждого узла в симуляции, принимая узел и его нулевой индекс. Полученное число затем сохраняется внутри, таким образом, сила каждого узла пересчитывается только при инициализации силы или при вызове этого метода с новым strength, а не при каждом применении силы.

radial.radius([radius]) · Источник

Если задан radius, устанавливает радиус окружности к заданному числу или функции, пересчитывает радиус для каждого узла и возвращает эту силу. Если radius не указан, возвращает текущую функцию доступа к radius.

Функция доступа к radius вызывается для каждого узла в симуляции, принимая узел и его нулевой индекс. Полученное число затем сохраняется внутри, таким образом, целевой радиус каждого узла пересчитывается только при инициализации силы или при вызове этого метода с новым radius, а не при каждом применении силы.

radial.x([x]) · Источник

Если задано x, устанавливает координату x центра окружности к заданному числу и возвращает эту силу. Если x не указано, возвращает текущую координату x центра, которая по умолчанию равна нулю.

radial.y([y]) · Источник

Если задано y, устанавливает координату y центра окружности к заданному числу и возвращает эту силу. Если y не указано, возвращает текущую координату y центра, которая по умолчанию равна нулю.

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

Spec-Zone.ru

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