var 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(); }