in public/bubblesets.js [890:929]
function fillPotentialArea(activeArea, members, nonMembers, potentialArea) {
var influenceFactor = 0;
// add all positive energy (included items) first, as negative energy
// (morphing) requires all positives to be already set
if(nodeInfluenceFactor) {
members.forEach(function(item) {
// add node energy
influenceFactor = nodeInfluenceFactor;
var nodeRDiff = nodeR0 - nodeR1;
// using inverse a for numerical stability
var inva = nodeRDiff * nodeRDiff;
calculateRectangleInfluence(potentialArea, influenceFactor / inva, nodeR1, item);
}); // end processing node items of this aggregate
} // end processing positive node energy
if(edgeInfluenceFactor) {
// add the influence of all the virtual edges
influenceFactor = edgeInfluenceFactor;
var inva = ((edgeR0 - edgeR1) * (edgeR0 - edgeR1));
if(virtualEdges.length > 0) {
calculateLinesInfluence(potentialArea, influenceFactor / inva, edgeR1, virtualEdges, activeArea);
}
}
// calculate negative energy contribution for all other visible items within bounds
if(negativeNodeInfluenceFactor) {
nonMembers.forEach(function(item) {
// if item is within influence bounds, add potential
if(activeArea.intersects(item)) {
// subtract influence
influenceFactor = negativeNodeInfluenceFactor;
var nodeRDiff = nodeR0 - nodeR1;
// using inverse a for numerical stability
var inva = nodeRDiff * nodeRDiff;
calculateRectangleNegativeInfluence(potentialArea, influenceFactor / inva, nodeR1, item);
}
});
}
}