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};
 | |
| } |