-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhelpers.js
52 lines (33 loc) · 882 Bytes
/
helpers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
function arrange( data ) {
function collide( node ) {
var r = node.r,
nx1 = node.x - r,
nx2 = node.x + r,
ny1 = node.y - r,
ny2 = node.y + r;
return function( quad, x1, y1, x2, y2 ) {
if ( quad.point && ( quad.point !== node ) ) {
var x = node.x - quad.point.x,
y = node.y - quad.point.y || 1,
l = Math.sqrt(x * x + y * y);
r = node.r + quad.point.r + 3;
if ( l < r ) {
l = ( l - r ) / l ;
node.y -= y *= l;
quad.point.y += y;
}
}
return x1 > nx2 || x2 < nx1 || y1 > ny2 || y2 < ny1;
};
}
var iterations = 25;
while ( --iterations ) {
var i = 0,
n = data.length,
q = d3.geom.quadtree()
.x( function( d ) { return d.x; } )
.y( function( d ) { return d.y; } )
( data );
while ( ++i < n ) q.visit( collide( data[ i ] ) ) ;
}
}