Spec-Zone.ru › D3.js 4

d3-force

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

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

Force Dragging IIIForce-Directed Tree

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

Collision DetectionBeeswarm

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

Force-Directed Lattice

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

Установка

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

<script src="https://d3js.org/d3-collection.v1.min.js"></script>
<script src="https://d3js.org/d3-dispatch.v1.min.js"></script>
<script src="https://d3js.org/d3-quadtree.v1.min.js"></script>
<script src="https://d3js.org/d3-timer.v1.min.js"></script>
<script src="https://d3js.org/d3-force.v1.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() Источник

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

Этот метод не отправляет события; события отправляются только внутренним таймером, когда симуляция запускается автоматически при создании или при вызове симуляция.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]) Источник

Если alpha указан, устанавливает текущее альфа в указанное число в диапазоне [0,1] и возвращает эту симуляцию. Если alpha не указан, возвращает текущее значение альфа, которое по умолчанию равно 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 указан, устанавливает текущее целевое альфа в указанное число в диапазоне [0,1] и возвращает эту симуляцию. Если target не указан, возвращает текущее целевое значение альфа, которое по умолчанию равно 0.

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

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

симуляция.force(имя[, сила]) Источник

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

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

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

simulation.force("charge", null);
симуляция.find(x, y[, радиус]) Источник

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

симуляция.on(названия_событий, [слушатель]) Источник

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

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

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

Обратите внимание, что события tick не отправляются, когда симуляция.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 для получения массива узлов симуляции.

сила(alpha) Источник

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

сила.initialize(узлы) Источник

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

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

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

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

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

центр.x([x]) Источник

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

центр.y([y]) Источник

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

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

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

d3.forceCollide([радиус]) Источник

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

столкновение.radius([радиус]) Источник

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

function radius() {
  return 1;
}

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

столкновение.strength([сила]) Источник

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

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

столкновение.iterations([итерации]) Источник

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

Связи

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

d3.forceLink([links]) Источник

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

link.links([links]) Источник

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

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

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

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

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

link.id([id]) Источник

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

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

Аксессор по умолчанию позволяет задавать source и target каждой связи как индекс с нулевым основанием в массиве узлов. Например:

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 не допускает ссылок. См. этот пример.

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

link.distance([distance]) Источник

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

function distance() {
  return 30;
}

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

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

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

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

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

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

link.iterations([iterations]) Источник

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

Сила многих тел

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

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

d3.forceManyBody() Источник

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

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

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

function strength() {
  return -30;
}

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

manyBody.theta([theta]) Источник

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

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

manyBody.distanceMin([distance]) Источник

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

manyBody.distanceMax([distance]) Источник

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

Размещение

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

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

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

x.strength([strength]) Source

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

Если strength не указано, возвращает текущий обработчик силы, который по умолчанию:

function strength() {
  return 0.1;
}

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

x.x([x]) Source

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

function x() {
  return 0;
}

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

d3.forceY([y]) Source

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

y.strength([strength]) Source

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

Если strength не указано, возвращает текущий обработчик силы, который по умолчанию:

function strength() {
  return 0.1;
}

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

y.y([y]) Source

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

function y() {
  return 0;
}

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

d3.forceRadial(radius[, x][, y]) Source

Radial Force

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

radial.strength([strength]) Source

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

Если strength не указано, возвращает текущий обработчик силы, который по умолчанию:

function strength() {
  return 0.1;
}

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

radial.radius([radius]) Source

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

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

radial.x([x]) Source

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

radial.y([y]) Source

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

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

Spec-Zone.ru

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