rendered paste bodyvar Nodes = new Array();
var Edges = new Array();
var Scene = _root.createEmptyMovieClip("Scene", _root.getNextHighestDepth());
var e1;
var e2;
function addNode()
{
var i = Nodes.length;
Nodes[i] = _root.createEmptyMovieClip("Node"+i, _root.getNextHighestDepth());
Nodes[i].attachMovie("Node", "Node"+i, 0);
Nodes[i]._width = Nodes[i]._height = 20;
Nodes[i].i = i;
Nodes[i]._x = 50+random(Stage.width-50);
Nodes[i]._y = 50+random(Stage.height-50);
Nodes[i].dx = 0;
Nodes[i].dy = 0;
Nodes[i].onRelease = function()
{
if(e1 == undefined)
e1 = this.i;
else
{
addEdge(e1, this.i);
delete e1;
}
}
return i;
}
function addEdge(from:Number, to:Number)
{
var i = Edges.length;
Edges[i] = _root.createEmptyMovieClip("Edge"+i, _root.getNextHighestDepth());
Edges[i].from = from;
Edges[i].to = to;
Edges[i].len = 100;
Edges[i].onEnterFrame = function()
{
this.clear();
this.lineStyle(1, 0xFFFFFF, 100);
this.moveTo(Nodes[this.from]._x, Nodes[this.from]._y);
this.lineTo(Nodes[this.to]._x, Nodes[this.to]._y);
}
}
Scene.onEnterFrame = function()
{
for (i = 0 ; i < _root.Edges.length ; i++)
{
var vx = Nodes[Edges[i].to]._x - Nodes[Edges[i].from]._x;
var vy = Nodes[Edges[i].to]._y - Nodes[Edges[i].from]._y;
var len = Math.sqrt(vx * vx + vy * vy);
len = (len == 0) ? .0001 : len;
var f = (Edges[i].len - len) / (len * 3);
var dx = f * vx;
var dy = f * vy;
Nodes[Edges[i].to].dx += dx;
Nodes[Edges[i].to].dy += dy;
Nodes[Edges[i].from].dx += -dx;
Nodes[Edges[i].from].dy += -dy;
}
for (i = 0 ; i < _root.Nodes.length; i++)
{
var dx = 0;
var dy = 0;
for (j = 0 ; j < _root.Nodes.length; j++)
{
if (i == j)
{
continue;
}
var vx = Nodes[i]._x - Nodes[j]._x;
var vy = Nodes[i]._y - Nodes[j]._y;
var len = vx * vx + vy * vy;
if (len == 0)
{
dx += Math.random();
dy += Math.random();
}
else if (len < 100*100)
{
dx += vx / len;
dy += vy / len;
}
}
var dlen = dx * dx + dy * dy;
if (dlen > 0)
{
dlen = Math.sqrt(dlen) / 2;
Nodes[i].dx += dx / dlen;
Nodes[i].dy += dy / dlen;
}
}
for (i = 0 ; i < _root.Nodes.length; i++)
{
Nodes[i]._x += Math.max(-5, Math.min(5, Nodes[i].dx));
Nodes[i]._y += Math.max(-5, Math.min(5, Nodes[i].dy));
if (Nodes[i]._x < 0)
{
Nodes[i]._x = 0;
}
else if (Nodes[i]._x > Stage.width)
{
Nodes[i]._x = Stage.width;
}
if (Nodes[i]._y < 0)
{
Nodes[i]._y = 0;
}
else if (Nodes[i]._y > Stage.height)
{
Nodes[i]._y = Stage.height;
}
Nodes[i].dx /= 2;
Nodes[i].dy /= 2;
}
}
var root = addNode();
for(i=0;i<10;i++)
{
n = addNode();
}