calculateAttraction method

void calculateAttraction(
  1. List<Edge> edges
)

Implementation

void calculateAttraction(List<Edge> edges) {
  edges.forEach((edge) {
    var source = edge.source;
    var destination = edge.destination;
    var delta = source.position - destination.position;
    var deltaDistance = max(EPSILON, delta.distance);
    var maxAttractionDistance = min(graphWidth * attractionPercentage, graphHeight * attractionPercentage);
    var attractionForce = min(0, (maxAttractionDistance - deltaDistance)).abs() / (maxAttractionDistance * 2);
    var attractionVector = delta * attractionForce * attractionRate;

    displacement[source] = displacement[source]! - attractionVector;
    displacement[destination] = displacement[destination]! + attractionVector;
  });
}