apply method

  1. @override
void apply(
  1. ForceSimulation simulation
)
override

Applies the force to the simulation.

Implementation

@override
void apply(ForceSimulation simulation) {
  final nodes = simulation.nodes;
  final alpha = simulation.alpha;

  for (int i = 0; i < nodes.length; i++) {
    final node = nodes[i];
    if (node.fixed) continue;

    for (int j = 0; j < nodes.length; j++) {
      if (i == j) continue;

      final other = nodes[j];
      final dx = other.x - node.x;
      final dy = other.y - node.y;
      var distance = math.sqrt(dx * dx + dy * dy);

      if (distance < distanceMin) distance = distanceMin;
      if (distance > distanceMax) continue;

      // Apply repulsive force
      final force = strength * alpha / (distance * distance);
      node.vx -= dx / distance * force;
      node.vy -= dy / distance * force;
    }
  }
}