| 56 | } |
| 57 | |
| 58 | function forceDirected_simple(layout, graph) { |
| 59 | for (let a = 0; a < graph.size; a++) { |
| 60 | for (let b = 0; b < graph.size; b++) { |
| 61 | if (a == b) continue; |
| 62 | let apart = layout[b].minus(layout[a]); |
| 63 | let distance = Math.max(1, apart.length); |
| 64 | let connected = graph.neighbors(a).has(b); |
| 65 | let size = forceSize(distance, connected); |
| 66 | let force = apart.times(1 / distance).times(size); |
| 67 | layout[a] = layout[a].plus(force); |
| 68 | } |
| 69 | } |
| 70 | } |
| 71 | |
| 72 | function pause() { |
| 73 | return new Promise(done => setTimeout(done, 0)) |