# 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

**

**