calculateRepulsion method

void calculateRepulsion(
  1. List<Node> nodes
)

Implementation

void calculateRepulsion(List<Node> nodes) {
  nodes.forEach((nodeA) {
    nodes.forEach((nodeB) {
      if (nodeA != nodeB) {
        var delta = nodeA.position - nodeB.position;
        var deltaDistance = max(EPSILON, delta.distance); //protect for 0
        var maxRepulsionDistance = min(graphWidth * repulsionPercentage, graphHeight * repulsionPercentage);
        var repulsionForce = max(0, maxRepulsionDistance - deltaDistance) / maxRepulsionDistance; //value between 0-1
        var repulsionVector = delta * repulsionForce * repulsionRate;

        displacement[nodeA] = displacement[nodeA]! + repulsionVector;
      }
    });
  });

  nodes.forEach((nodeA) {
    displacement[nodeA] = displacement[nodeA]! / nodes.length.toDouble();
  });
}