Class FRLayoutAlgorithm2D<V,​E>

  • Type Parameters:
    V - the vertex type
    E - the edge type
    All Implemented Interfaces:
    LayoutAlgorithm2D<V,​E>
    Direct Known Subclasses:
    IndexedFRLayoutAlgorithm2D

    public class FRLayoutAlgorithm2D<V,​E>
    extends java.lang.Object
    Fruchterman and Reingold Force-Directed Placement Algorithm. The algorithm belongs in the broad category of force directed graph drawing algorithms and is described in the paper:
    • Thomas M. J. Fruchterman and Edward M. Reingold. Graph drawing by force-directed placement. Software: Practice and experience, 21(11):1129--1164, 1991.
    Author:
    Dimitrios Michail
    • Field Detail

      • DEFAULT_ITERATIONS

        public static final int DEFAULT_ITERATIONS
        Default number of iterations
        See Also:
        Constant Field Values
      • DEFAULT_NORMALIZATION_FACTOR

        public static final double DEFAULT_NORMALIZATION_FACTOR
        Default normalization factor when calculating optimal distance
        See Also:
        Constant Field Values
      • rng

        protected java.util.Random rng
      • optimalDistance

        protected double optimalDistance
      • normalizationFactor

        protected double normalizationFactor
      • iterations

        protected int iterations
      • initializer

        protected java.util.function.Function<V,​Point2D> initializer
        A model initializer
    • Constructor Detail

      • FRLayoutAlgorithm2D

        public FRLayoutAlgorithm2D()
        Create a new layout algorithm
      • FRLayoutAlgorithm2D

        public FRLayoutAlgorithm2D​(int iterations)
        Create a new layout algorithm
        Parameters:
        iterations - number of iterations
      • FRLayoutAlgorithm2D

        public FRLayoutAlgorithm2D​(int iterations,
                                   double normalizationFactor)
        Create a new layout algorithm
        Parameters:
        iterations - number of iterations
        normalizationFactor - normalization factor for the optimal distance
      • FRLayoutAlgorithm2D

        public FRLayoutAlgorithm2D​(int iterations,
                                   double normalizationFactor,
                                   java.util.Random rng)
        Create a new layout algorithm
        Parameters:
        iterations - number of iterations
        normalizationFactor - normalization factor for the optimal distance
        rng - the random number generator
      • FRLayoutAlgorithm2D

        public FRLayoutAlgorithm2D​(int iterations,
                                   double normalizationFactor,
                                   java.util.function.BiFunction<LayoutModel2D<V>,​java.lang.Integer,​FRLayoutAlgorithm2D.TemperatureModel> temperatureModelSupplier,
                                   java.util.Random rng)
        Create a new layout algorithm
        Parameters:
        iterations - number of iterations
        normalizationFactor - normalization factor for the optimal distance
        temperatureModelSupplier - a simulated annealing temperature model supplier
        rng - the random number generators
    • Method Detail

      • layout

        public void layout​(Graph<V,​E> graph,
                           LayoutModel2D<V> model)
        Description copied from interface: LayoutAlgorithm2D
        Layout a graph.
        Parameters:
        graph - the graph
        model - the layout model to use
      • attractiveForce

        protected double attractiveForce​(double distance)
        Calculate the attractive force.
        Parameters:
        distance - the distance
        Returns:
        the force
      • repulsiveForce

        protected double repulsiveForce​(double distance)
        Calculate the repulsive force.
        Parameters:
        distance - the distance
        Returns:
        the force
      • calculateRepulsiveForces

        protected java.util.Map<V,​Point2D> calculateRepulsiveForces​(Graph<V,​E> graph,
                                                                          LayoutModel2D<V> model)
        Calculate the repulsive forces between vertices
        Parameters:
        graph - the graph
        model - the model
        Returns:
        the displacement per vertex due to the repulsive forces
      • calculateAttractiveForces

        protected java.util.Map<V,​Point2D> calculateAttractiveForces​(Graph<V,​E> graph,
                                                                           LayoutModel2D<V> model)
        Calculate the repulsive forces between vertices connected with edges.
        Parameters:
        graph - the graph
        model - the model
        Returns:
        the displacement per vertex due to the attractive forces
      • getInitializer

        public java.util.function.Function<V,​Point2D> getInitializer()
        Get the initializer
        Returns:
        the initializer
      • setInitializer

        public void setInitializer​(java.util.function.Function<V,​Point2D> initializer)
        Set the initializer
        Parameters:
        initializer - the initializer
      • init

        protected void init​(Graph<V,​E> graph,
                            LayoutModel2D<V> model)
        Initialize a model using the initializer.
        Parameters:
        graph - the graph
        model - the model