Class KKLayout<V,​E>

  • All Implemented Interfaces:
    com.google.common.base.Function<V,​java.awt.geom.Point2D>, Layout<V,​E>, IterativeContext, java.util.function.Function<V,​java.awt.geom.Point2D>

    public class KKLayout<V,​E>
    extends AbstractLayout<V,​E>
    implements IterativeContext
    Implements the Kamada-Kawai algorithm for node layout. Does not respect filter calls, and sometimes crashes when the view changes to it.
    See Also:
    "Tomihisa Kamada and Satoru Kawai: An algorithm for drawing general indirect graphs. Information Processing Letters 31(1):7-15, 1989", "Tomihisa Kamada: On visualization of abstract objects and relations. Ph.D. dissertation, Dept. of Information Science, Univ. of Tokyo, Dec. 1988."
    • Field Detail

      • EPSILON

        private double EPSILON
      • currentIteration

        private int currentIteration
      • maxIterations

        private int maxIterations
      • status

        private java.lang.String status
      • L

        private double L
      • K

        private double K
      • dm

        private double[][] dm
      • adjustForGravity

        private boolean adjustForGravity
      • exchangeVertices

        private boolean exchangeVertices
      • vertices

        private V[] vertices
      • xydata

        private java.awt.geom.Point2D[] xydata
      • distance

        protected Distance<V> distance
        Retrieves graph distances between vertices of the visible graph
      • diameter

        protected double diameter
        The diameter of the visible graph. In other words, the maximum over all pairs of vertices of the length of the shortest path between a and bf the visible graph.
      • length_factor

        private double length_factor
        A multiplicative factor which partly specifies the "preferred" length of an edge (L).
      • disconnected_multiplier

        private double disconnected_multiplier
        A multiplicative factor which specifies the fraction of the graph's diameter to be used as the inter-vertex distance between disconnected vertices.
    • Constructor Detail

      • KKLayout

        public KKLayout​(Graph<V,​E> g)
      • KKLayout

        public KKLayout​(Graph<V,​E> g,
                        Distance<V> distance)
        Creates an instance for the specified graph and distance metric.
        Parameters:
        g - the graph on which the layout algorithm is to operate
        distance - specifies the distance between pairs of vertices
    • Method Detail

      • setLengthFactor

        public void setLengthFactor​(double length_factor)
        Parameters:
        length_factor - a multiplicative factor which partially specifies the preferred length of an edge
      • setDisconnectedDistanceMultiplier

        public void setDisconnectedDistanceMultiplier​(double disconnected_multiplier)
        Parameters:
        disconnected_multiplier - a multiplicative factor that specifies the fraction of the graph's diameter to be used as the inter-vertex distance between disconnected vertices
      • getStatus

        public java.lang.String getStatus()
        Returns:
        a string with information about the current status of the algorithm.
      • setMaxIterations

        public void setMaxIterations​(int maxIterations)
      • isIncremental

        public boolean isIncremental()
        Returns:
        true
      • done

        public boolean done()
        Specified by:
        done in interface IterativeContext
        Returns:
        true if the current iteration has passed the maximum count.
      • 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>
      • adjustForGravity

        public void adjustForGravity()
        Shift all vertices so that the center of gravity is located at the center of the screen.
      • setSize

        public void setSize​(java.awt.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
      • setAdjustForGravity

        public void setAdjustForGravity​(boolean on)
      • getAdjustForGravity

        public boolean getAdjustForGravity()
      • setExchangeVertices

        public void setExchangeVertices​(boolean on)
        Enable or disable the local minimum escape technique by exchanging vertices.
        Parameters:
        on - iff the local minimum escape technique is to be enabled
      • getExchangeVertices

        public boolean getExchangeVertices()
      • calcDeltaXY

        private double[] calcDeltaXY​(int m)
        Determines a step to new position of the vertex m.
      • calcDeltaM

        private double calcDeltaM​(int m)
        Calculates the gradient of energy function at the vertex m.
      • calcEnergy

        private double calcEnergy()
        Calculates the energy function E.
      • calcEnergyIfExchanged

        private double calcEnergyIfExchanged​(int p,
                                             int q)
        Calculates the energy function E as if positions of the specified vertices are exchanged.
      • reset

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