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 (nodelink[i][j] != null) { var nlen = Math.sqrt(len); nlen = (nlen == 0) ? .0001 : nlen; var f = (edges[(nodelink[i][j] - 1)].len - nlen) / (nlen * 3); var ndx = f * vx; var ndy = f * vy; nodes[i].dx += ndx; nodes[i].dy += ndy; nodes[j].dx -= ndx; nodes[j].dy -= ndy; edges[(nodelink[i][j] - 1)].graphics.clear(); edges[(nodelink[i][j] - 1)].graphics.lineStyle(1, 0xFFFFFF, 100); edges[(nodelink[i][j] - 1)].graphics.moveTo(nodes[j].x, nodes[j].y); edges[(nodelink[i][j] - 1)].graphics.lineTo(nodes[i].x, nodes[i].y); } 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; } 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; }