Public feed #377874

Mine

public text v1 · immutable
Raw Edit
·published 2007-03-02 02:26 UTC
rendered paste body
		public function enterFrame(evt:Event)
		{
			for (i in edges) 
			{
				var nvx = nodes[edges[i].to].x - nodes[edges[i].from].x;
				var nvy = nodes[edges[i].to].y - nodes[edges[i].from].y;
				
				var nlen = Math.sqrt(nvx * nvx + nvy * nvy);
				nlen = (nlen == 0) ? .0001 : nlen;
				
				var f = (edges[i].len - nlen) / (nlen * 3);
				var ndx = f * nvx;
				var ndy = f * nvy;
			
				nodes[edges[i].to].dx += ndx;
				nodes[edges[i].to].dy += ndy;
				nodes[edges[i].from].dx += -ndx;
				nodes[edges[i].from].dy += -ndy;
				
				edges[i].graphics.clear();
				edges[i].graphics.lineStyle(1, 0xFFFFFF, 100);
				
				edges[i].graphics.moveTo(nodes[edges[i].from].x, nodes[edges[i].from].y);
				edges[i].graphics.lineTo(nodes[edges[i].to].x, nodes[edges[i].to].y);
			}
			
			for (i in nodes) 
			{			
				var dx = 0;
				var dy = 0;
		
				for (j in nodes) 
				{
					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 in nodes)
			{
				var movx = Math.max(-5, Math.min(5, nodes[i].dx));
				var movy = Math.max(-5, Math.min(5, nodes[i].dy));
				
				if(nodes[i].isDragging == false) // dragging
				{	
					if(Math.abs(movx) > 1)
						nodes[i].x += movx;
	
							
					if(Math.abs(movy) > 1)
						nodes[i].y += movy;
				}
				
				if (nodes[i].x < 0) 
				{
					nodes[i].x = 0;
				} 
				else if (nodes[i].x > stage.stageWidth) 
				{
					nodes[i].x = stage.stageWidth;
				}
					
				if (nodes[i].y < 0) 
				{
					nodes[i].y = 0;
				} 
				else if (nodes[i].y > stage.stageHeight) 
				{
					nodes[i].y = stage.stageHeight;
				}
				
				nodes[i].dx /= 2;
				nodes[i].dy /= 2;
			}
		}