All pastes #368582 Raw Edit

Someone

public text v1 · immutable
#368582 ·published 2007-02-23 05:06 UTC
rendered paste body
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();
}