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