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) {
               ...