/** * Created by Alex on 5/20/2015. */ function loadJSON(path, success, error) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { success(JSON.parse(xhr.responseText)); } else { error(xhr); } } }; xhr.open('GET', path, true); xhr.send(); } function getScaleFreeNetwork(nodeCount) { var nodes = []; var edges = []; var connectionCount = []; // randomly create some nodes and edges for (var i = 0; i < nodeCount; i++) { nodes.push({ id: i, label: String(i) }); connectionCount[i] = 0; // create edges in a scale-free-network way if (i == 1) { var from = i; var to = 0; edges.push({ from: from, to: to }); connectionCount[from]++; connectionCount[to]++; } else if (i > 1) { var conn = edges.length * 2; var rand = Math.floor(Math.random() * conn); var cum = 0; var j = 0; while (j < connectionCount.length && cum < rand) { cum += connectionCount[j]; j++; } var from = i; var to = j; edges.push({ from: from, to: to }); connectionCount[from]++; connectionCount[to]++; } } return {nodes:nodes, edges:edges}; } var randomSeed = 764; // Math.round(Math.random()*1000); function seededRandom() { var x = Math.sin(randomSeed++) * 10000; return x - Math.floor(x); } function getScaleFreeNetworkSeeded(nodeCount, seed) { if (seed) { randomSeed = Number(seed); } var nodes = []; var edges = []; var connectionCount = []; var edgesId = 0; // randomly create some nodes and edges for (var i = 0; i < nodeCount; i++) { nodes.push({ id: i, label: String(i) }); connectionCount[i] = 0; // create edges in a scale-free-network way if (i == 1) { var from = i; var to = 0; edges.push({ id: edgesId++, from: from, to: to }); connectionCount[from]++; connectionCount[to]++; } else if (i > 1) { var conn = edges.length * 2; var rand = Math.floor(seededRandom() * conn); var cum = 0; var j = 0; while (j < connectionCount.length && cum < rand) { cum += connectionCount[j]; j++; } var from = i; var to = j; edges.push({ id: edgesId++, from: from, to: to }); connectionCount[from]++; connectionCount[to]++; } } return {nodes:nodes, edges:edges}; }