70 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * 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};
 | 
						|
} |