Random Walks with EaselJS -- Radial Circle Walking

For comparison with n-gon.

by Manandy Software

HTML

<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.0/backbone-min.js"></script>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.3/css/bootstrap.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.3/js/bootstrap.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/EaselJS/0.7.1/easeljs.min.js"></script>
<div class="canvasHolder">
    <div class="btn-group" id="button">
        <button id="retryButton" type="button" class="btn btn-primary">Retry</button>
        <button id="trashButton" type="button" class="btn btn-primary">Trash</button>
        <input type="number" id="expansion" value="10"></input>
        <input type="number" id="rexpansion" value="2"></input>
        <input type="number" id="rfactor" value="30"></input>
    </div>
    <canvas id="gameCanvas" width="640" height="960">Not supported</canvas>
</div>

CSS

#gameCanvas {
    background-color : #e6e6e6;
}

JavaScript

function generateStandardBivariateNormal(){
    var x1 = Math.random();
    var x2 = Math.random();
    var z1 = Math.sqrt(-2*Math.log(x1))*Math.cos(2*Math.PI*x2);
    var z2 = Math.sqrt(-2*Math.log(x1))*Math.sin(2*Math.PI*x2);
    return [z1, z2];
}

function generateBivariateNormal(mean, variance){
    var zs = generateStandardBivariateNormal();
    zs[0] = zs[0]*Math.sqrt(variance) + mean;
    zs[1] = zs[1]*Math.sqrt(variance) + mean;
    return zs;
}

function generateHaltonSequence(base, npoints){
    var pointsfrac = new Array();
    var points = new Array();
    pointsfrac[0] = [1,base,1];
    points[0] = 1/base;
    var currnum = 1;
    var currbase = base;
    var currbasepow = 1;
    var currindex = 0;
    for(var i = 1; i < npoints; i++){
        if(currbase - currnum == 1){
//            console.log(i-1,currnum, currbase, currindex, JSON.stringify(pointsfrac[i-1]), JSON.stringify(points[i-1]));
            currbasepow += 1;
            currbase *= base;
            currnum = 1;
            points[i] = currnum/currbase;
            pointsfrac[i] = [currnum, currbase, currbasepow];
            currindex = 0;
        }
        else{
//            console.log(i-1,currnum, currbase, currindex, JSON.stringify(pointsfrac[i-1]), JSON.stringify(points[i-1]));
            currnum = (Math.pow(base,currbasepow-pointsfrac[currindex][2]))*pointsfrac[currindex][0]+1;
            pointsfrac[i] = [currnum,currbase,currbasepow];
            points[i] = currnum/currbase;
            currindex += 1;

        }
    }
    points = [0,1].concat(points);
    return points;
}

function findNearestBrownianBridgePoints(p, points, maxindex){
    var min = -1;
    var max = Math.pow(10,10);
    var mini = -1;
    var maxi = -1;
    for(var i = 0; i < maxindex; i++){
        if(points[i] < max && p < points[i]){
            max = points[i];
            maxi = i;
        }
        if(points[i] > min && p > points[i]){
            min = points[i];
            mini = i;
        }
   ...