GeoNetwork Simulator
by mmarcon
HTML
<div id="grid">
</div>
CSS
body {
background-color: #fff;
}
#grid {
width: 500px;
height: 500px;
background-color: #fff;
box-shadow: 0 0 20px #ccc;
margin: 10px auto;
}
JavaScript
var App = App || {};
(function (A) {
var r, grid, gW, gH, gSteps, ISPs = [], nodes = [], ISPSet,
Point = function (x, y) {
this.x = x;
this.y = y;
},
raphInit = function (id, w, h, steps) {
var i, s, l;
r = Raphael (id, w, h);
grid = r.set();
for (i = 1; i < steps; i++) {
s = i * w/steps;
l = r.path ('M0 ' + s + 'L' + w + ' ' + s);
grid.push (l);
s = i * h/steps;
l = r.path ('M' + s + ' 0L' + s + ' ' + h);
grid.push (l);
}
grid.attr ({
stroke: '#333',
'stroke-width': 0.2
});
gW = w;
gH = h;
gSteps = steps;
},
assignISPs = function (n) {
var i, j, assignedISPs = 0, sW = gW / gSteps, sH = gH / gSteps, c, isp;
ISPSet = r.set();
for (i = 0; i < gSteps; i++) {
for (j = 0; j < gSteps; j++) {
if (Math.random() > 0.8 && assignedISPs < n) {
isp = new Point (i * sW + sW / 2, j * sH + sH / 2);
c = r.circle (isp.x, isp.y, 3);
c.attr ({
fill: '#cc0000',
stroke: '#111',
'stroke-width': 0.5
});
ISPs.push (isp);
ISPSet.push (c);
assignedISPs ++;
}
}
}
if (assignedISPs < n) {
assignISPs (n - assignedISPs);
}
},
connectISPs = function() {
var i, j, ispS, ispD, ISPsCopy = ISPs.slice(0), p;
ISPsCopy.sort(function(i1, i2) {
return (new Point(0,0)).distance (i1.x, i1.y) - (new Point(0,0)).distance (i2.x, i2.y);
});
ispS = ISPsCopy.shift();
for (i = 0; i < ISPs.length - 1; i++) {
ispD = ISPsCopy.shift();
ISPsCopy.sort(function(i1, i2) {
...