Spring Layouter
The principle of spring layout is to simulate the physical environment. It is a general layout algorithm realized by the balance of several force, a dynamic layout, which can express people relation chart and dynamic network chart. In Qunee, it is realized by Q.SpringLayouter.
Layout principles
The spring layout is the balance of three force: electrostatic repulsion, elastic force and central gravity. The previous two force are subject to Coulomb law and Hu Ke law. The third force is a balance for controlling the element moving the the center
Coulomb law:
Coulomb law:
Central gravity is in direct proportion to the distance
F = a * D
Layout params
The spring layout has three control factors: spring coefficient, gravity coefficient and repulsion coefficient
#elasticity - the higher the elasticity
coefficient is the shorter the edge zooming would be, with the reference value at 0-10
#attractive - the higher the central
gravity coefficient is, the more intense the overall distribution would be, with the reference value at 0-1
#repulsion - the higher the repulsion coefficient
value is, the bigger the distance among nodes would be, with the reference value at 0-100
Example
Simulated data would be used in the following example to express the effect of spring layout
var graph = new Q.Graph("canvas");
var nodes = [];
function createNode(name){
var node = graph.createNode(name);
node.size = {width: 16};
nodes.push(node);
return node;
}
function createRandomEdge(){
var from = nodes[Q.randomInt(nodes.length)];
var to = nodes[Q.randomInt(nodes.length)];
if(from != to){
return graph.createEdge(from, to);
}
}
var i = 0;
while(i++ < 100){
createNode("" + i);
}
i = 0;
while(i++ < 100){
createRandomEdge();
}
var layouter = new Q.SpringLayouter(graph);
layouter.repulsion = 50;
layouter.attractive = 0.5;
layouter.elastic = 5;
layouter.start();
Operation effect
**
**