123 lines
3 KiB
JavaScript
123 lines
3 KiB
JavaScript
|
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
|
||
|
}
|
||
|
});
|
||
|
|
||
|
}
|