Skip to main content
100%

Isolating Forces

✓ Published0🌍 Public
Mmbostock
Last edited Nov 15, 2016
Created on Nov 7, 2016

The visualization shows 400 nodes divided into brown and steelblue groups that separate into distinct columns under opposing horizontal forces while a shared many-body force creates clustering. Using d3.forceSimulation, the code demonstrates a custom isolate() function that patches each force's initialize method to restrict the d3.forceX forces to only their respective color group. Each node is rendered as a small circle on a Canvas element during the simulation's tick event, with the grouping effect emerging from the selectively applied forces.

AI-generated description

This example demonstrates how to patch force.initialize such that a force applies only to a subset of nodes in a simulation.

function isolate(force, filter) {
  var initialize = force.initialize;
  force.initialize = function() { initialize.call(force, nodes.filter(filter)); };
  return force;
}

Another way of having forces only apply to some nodes is to set the force strength to zero for those nodes by using a custom strength accessor (e.g., x.x). But if you have lots of isolated forces and lots of nodes, it is faster to isolate the force to a subset of nodes than to set the strength to zero for unaffected nodes.

gpl-3.0 Licensed

Similar vizzes