Class FRLayout2<V,E>

java.lang.Object
edu.uci.ics.jung.algorithms.layout.AbstractLayout<V,E>
edu.uci.ics.jung.algorithms.layout.FRLayout2<V,E>
All Implemented Interfaces:
com.google.common.base.Function<V,Point2D>, Layout<V,E>, IterativeContext, Function<V,Point2D>

public class FRLayout2<V,E> extends AbstractLayout<V,E> implements IterativeContext
Implements the Fruchterman-Reingold force-directed algorithm for node layout. This is an experimental attempt at optimizing FRLayout; if it is successful it will be folded back into FRLayout (and this class will disappear).

Behavior is determined by the following settable parameters:

  • attraction multiplier: how much edges try to keep their vertices together
  • repulsion multiplier: how much vertices try to push each other apart
  • maximum iterations: how many iterations this algorithm will use before stopping
Each of the first two defaults to 0.75; the maximum number of iterations defaults to 700.
See Also:
  • "Fruchterman and Reingold, 'Graph Drawing by Force-directed Placement'"
  • "http://i11www.ilkd.uni-karlsruhe.de/teaching/SS_04/visualisierung/papers/fruchterman91graph.pdf"
  • Field Details

    • forceConstant

      private double forceConstant
    • temperature

      private double temperature
    • currentIteration

      private int currentIteration
    • maxIterations

      private int maxIterations
    • frVertexData

      protected com.google.common.cache.LoadingCache<V,Point2D> frVertexData
    • attraction_multiplier

      private double attraction_multiplier
    • attraction_constant

      private double attraction_constant
    • repulsion_multiplier

      private double repulsion_multiplier
    • repulsion_constant

      private double repulsion_constant
    • max_dimension

      private double max_dimension
    • innerBounds

      private Rectangle2D innerBounds
    • checked

      private boolean checked
    • EPSILON

      private double EPSILON
  • Constructor Details

  • Method Details

    • setSize

      public void setSize(Dimension size)
      Description copied from class: AbstractLayout
      When a visualization is resized, it presumably wants to fix the locations of the vertices and possibly to reinitialize its data. The current method calls initializeLocations followed by initialize_local.
      Specified by:
      setSize in interface Layout<V,E>
      Overrides:
      setSize in class AbstractLayout<V,E>
      Parameters:
      size - the space to use to lay out this graph
    • setAttractionMultiplier

      public void setAttractionMultiplier(double attraction)
    • setRepulsionMultiplier

      public void setRepulsionMultiplier(double repulsion)
    • reset

      public void reset()
      Specified by:
      reset in interface Layout<V,E>
    • initialize

      public void initialize()
      Description copied from interface: Layout
      Initializes fields in the node that may not have been set during the constructor. Must be called before the iterations begin.
      Specified by:
      initialize in interface Layout<V,E>
    • doInit

      private void doInit()
    • step

      public void step()
      Moves the iteration forward one notch, calculation attraction and repulsion between vertices and edges and cooling the temperature.
      Specified by:
      step in interface IterativeContext
    • calcPositions

      protected void calcPositions(V v)
    • calcAttraction

      protected void calcAttraction(E e)
    • calcRepulsion

      protected void calcRepulsion(V v1)
    • cool

      private void cool()
    • setMaxIterations

      public void setMaxIterations(int maxIterations)
    • isIncremental

      public boolean isIncremental()
      Returns:
      true
    • done

      public boolean done()
      Specified by:
      done in interface IterativeContext
      Returns:
      true once the current iteration has passed the maximum count.