d3-force
Этот модуль реализует численный интегратор velocity Verlet для моделирования физических сил, действующих на частицы. Моделирование упрощено: предполагается постоянный единичный временной шаг Δt = 1 для каждого шага и постоянная единичная масса m = 1 для всех частиц. В результате сила F, действующая на частицу, эквивалентна постоянному ускорению a в течение временного интервала Δt и может быть смоделирована просто путём добавления к скорости частицы, которая затем добавляется к положению частицы.
В области визуализации информации физические симуляции полезны для изучения сетей и иерархий!
Вы также можете моделировать круги (диски) с столкновениями, например, для диаграмм пузырей или диаграмм рассеивания:
Вы даже можете использовать его как примитивный движок физики, например, для моделирования ткани:
Для использования этого модуля создайте симуляцию для массива узлов и составьте желаемые силы. Затем подпишитесь на события тика, чтобы отобразить узлы по мере их обновления в вашей предпочтительной графической системе, например, 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]) Источник
Создаёт новую симуляцию со заданным массивом узлов и без сил. Если nodes не указан, по умолчанию используется пустой массив. Симулятор запускается автоматически; используйте simulation.on для подписки на события тика по мере выполнения симуляции. Если вы хотите запустить симуляцию вручную, вызовите simulation.stop, а затем вызовите simulation.tick по мере необходимости.
simulation.restart() Источник
Перезапускает внутренний таймер симуляции и возвращает симуляцию. В сочетании с simulation.alphaTarget или simulation.alpha, этот метод может быть использован для «подогрева» симуляции во время взаимодействия, например, при перетаскивании узла, или для возобновления симуляции после временной паузы с помощью simulation.stop.
simulation.stop() Источник
Останавливает внутренний таймер симуляции, если он запущен, и возвращает симуляцию. Если таймер уже остановлен, этот метод ничего не делает. Этот метод полезен для ручного выполнения симуляции; см. simulation.tick.
simulation.tick() Источник
Увеличивает текущую альфа на (alphaTarget - alpha) × alphaDecay; затем вызывает каждую зарегистрированную силу, передавая новую альфа; затем уменьшает скорость каждого узла на velocity × velocityDecay; в заключение увеличивает положение каждого узла на velocity.
Этот метод не отправляет события; события отправляются только внутренним таймером, когда симуляция запускается автоматически при создании или путём вызова simulation.restart. Естественное количество тиков при запуске симуляции — ⌈log(alphaMin) / log(1 - alphaDecay)⌉; по умолчанию это 300.
Этот метод может быть использован в сочетании с simulation.stop для вычисления статического макета сил. Для больших графов статические макеты должны вычисляться в веб-воркере, чтобы избежать зависания пользовательского интерфейса.
simulation.nodes([nodes]) Источник
Если nodes указан, устанавливает узлы симуляции в указанный массив объектов, инициализируя их позиции и скорости при необходимости, а затем переинициализирует любые связанные силы; возвращает симуляцию. Если nodes не указан, возвращает массив узлов симуляции, как задано в конструкторе.
Каждый узел должен быть объектом. Следующие свойства назначаются симуляцией:
-
index- индекс узла в nodes -
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 или удалите эти свойства.
Если заданный массив nodes изменяется, например, при добавлении или удалении узлов из симуляции, этот метод должен быть вызван снова с новым (или изменённым) массивом, чтобы уведомить симуляцию и связанные силы об изменении; симуляция не создаёт защитную копию указанного массива.
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⟩ с заданным радиусом поиска radius. Если radius не указан, он по умолчанию равен бесконечности. Если в области поиска нет узла, возвращается undefined.
симуляция.on(типы_событий, [слушатель]) Источник
Если указан слушатель, устанавливает слушателя события для указанных типов_событий и возвращает эту симуляцию. Если для того же типа и имени уже был зарегистрирован слушатель события, существующий слушатель удаляется перед добавлением нового слушателя. Если слушатель равен null, удаляет текущих слушателей событий для указанных типов_событий, если таковые имеются. Если слушатель не указан, возвращает первого текущего назначенного слушателя, соответствующего указанным типам_событий, если таковой имеется. При срабатывании указанного события каждый слушатель будет вызван с контекстом this в качестве симуляции.
типы_событий — это строка, содержащая один или несколько тип_события, разделенных пробелом. Каждый тип_события — это тип, за которым необязательно следует точка (.) и имя, например, tick.foo и tick.bar; имя позволяет регистрировать несколько слушателей для одного и того же типа. тип должен быть одним из следующих:
-
tick— после каждого шага таймера внутренней симуляции. -
end— после остановки таймера симуляции, когда alpha < alphaMin.
Обратите внимание, что события 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.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 было не меньше radius(a) + radius(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;
} Обработчик идентификатора по умолчанию позволяет указать источник и цель каждой связи как нулевой индекс в массиве узлов. Например:
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
Создаёт новую силу позиционирования к окружности заданного 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–2018 Michael Bostock
Licensed under the BSD License.
https://github.com/d3/d3-force