function fillPotentialArea()

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);
        }
      });
    }
  }