calculateRepulsion method
void
calculateRepulsion(
- 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();
});
}