New file |
0,0 → 1,122 |
if(!dojo._hasResource["dojox.math._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. |
dojo._hasResource["dojox.math._base"] = true; |
dojo.provide("dojox.math._base"); |
|
dojo.mixin(dojox.math, { |
degreesToRadians: function(/* Number */n){ |
// summary |
// Convert the passed number to radians. |
return (n*Math.PI)/180; // Number |
}, |
radiansToDegrees: function(/* Number */n){ |
// summary |
// Convert the passed number to degrees. |
return (n*180)/Math.PI; // Number |
}, |
|
factoral: function(/* Number */n){ |
// summary |
// Return the factoral of n. |
if(n<1){ |
return 0; // Number |
} |
var ret=1; |
for(var i=1; i<=n; i++){ |
ret*=i; |
} |
return ret; // Number |
}, |
permutations: function(/* Number */n, /* Number */k){ |
// summary |
// TODO |
if(n==0 || k==0){ |
return 1; // Number |
} |
return (this.factoral(n)/this.factoral(n-k)); |
}, |
combinations: function(/* Number */n, /* Number */r){ |
// summary |
// TODO |
if(n==0 || r==0){ |
return 1; // Number |
} |
return (this.factoral(n)/(this.factoral(n-r)*this.factoral(r))); // Number |
}, |
bernstein: function(/* Number */t, /* Number */n, /* Number */ i){ |
// summary |
// TODO |
return (this.combinations(n, i)*Math.pow(t, i)*Math.pow(1-t, n-i)); // Number |
}, |
gaussian: function(){ |
// summary |
// Return a random number based on the Gaussian algo. |
var k=2; |
do{ |
var i=2*Math.random()-1; |
var j=2*Math.random()-1; |
k = i*i+j*j; |
}while(k>=1); |
return (i * Math.sqrt((-2*Math.log(k))/k)); // Number |
}, |
|
// basic statistics |
sd: function(/* Array */a){ |
// summary |
// Returns the standard deviation of the passed arguments. |
return Math.sqrt(this.variance(a)); // Number |
}, |
variance: function(/* Array */a){ |
// summary |
// Find the variance in the passed array of numbers. |
var mean=0, squares=0; |
dojo.forEach(a, function(item){ |
mean+=item; |
squares+=Math.pow(item,2); |
}); |
return (squares/a.length)-Math.pow(mean/a.length, 2); // Number |
}, |
|
// create a range of numbers |
range: function(/* Number */a, /* Number? */b, /* Number? */step){ |
// summary |
// Create a range of numbers based on the parameters. |
if(arguments.length<2){ |
b=a,a=0; |
} |
var s=step||1; |
var range=[]; |
if(s>0){ |
for(var i=a; i<b; i+=s){ |
range.push(i); |
} |
}else{ |
if(s<0){ |
for(var i=a; i>b; i+=s){ |
range.push(i); |
} |
}else{ |
throw new Error("dojox.math.range: step must not be zero."); |
} |
} |
return range; // Array |
}, |
distance: function(/* Array */a, /* Array */b){ |
// summary |
// Calculate the distance between point A and point B |
return Math.sqrt(Math.pow(b[0]-a[0],2)+Math.pow(b[1]-a[1],2)); // Number |
}, |
midpoint: function(/* Array */a, /* Array */b){ |
// summary |
// Calculate the midpoint between points A and B. A and B may be multidimensional. |
if(a.length!=b.length){ |
console.error("dojox.math.midpoint: Points A and B are not the same dimensionally.", a, b); |
} |
var m=[]; |
for(var i=0; i<a.length; i++){ |
m[i]=(a[i]+b[i])/2; |
} |
return m; // Array |
} |
}); |
|
} |