Subversion Repositories Applications.papyrus

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2150 mathias 1
if(!dojo._hasResource["dojox.math._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
2
dojo._hasResource["dojox.math._base"] = true;
3
dojo.provide("dojox.math._base");
4
 
5
dojo.mixin(dojox.math, {
6
	degreesToRadians: function(/* Number */n){
7
		//	summary
8
		//	Convert the passed number to radians.
9
		return (n*Math.PI)/180;	// Number
10
	},
11
	radiansToDegrees: function(/* Number */n){
12
		//	summary
13
		//	Convert the passed number to degrees.
14
		return (n*180)/Math.PI;	//	Number
15
	},
16
 
17
	factoral: function(/* Number */n){
18
		//	summary
19
		//	Return the factoral of n.
20
		if(n<1){
21
			return 0;	// Number
22
		}
23
		var ret=1;
24
		for(var i=1; i<=n; i++){
25
			ret*=i;
26
		}
27
		return ret;	// Number
28
	},
29
	permutations: function(/* Number */n, /* Number */k){
30
		//	summary
31
		//	TODO
32
		if(n==0 || k==0){
33
			return 1; 	// Number
34
		}
35
		return (this.factoral(n)/this.factoral(n-k));
36
	},
37
	combinations: function(/* Number */n, /* Number */r){
38
		//	summary
39
		//	TODO
40
		if(n==0 || r==0){
41
			return 1; 	//	Number
42
		}
43
		return (this.factoral(n)/(this.factoral(n-r)*this.factoral(r)));	// Number
44
	},
45
	bernstein: function(/* Number */t, /* Number */n, /* Number */ i){
46
		//	summary
47
		//	TODO
48
		return (this.combinations(n, i)*Math.pow(t, i)*Math.pow(1-t, n-i));	//	Number
49
	},
50
	gaussian: function(){
51
		//	summary
52
		//	Return a random number based on the Gaussian algo.
53
		var k=2;
54
		do{
55
			var i=2*Math.random()-1;
56
			var j=2*Math.random()-1;
57
			k = i*i+j*j;
58
		}while(k>=1);
59
		return (i * Math.sqrt((-2*Math.log(k))/k));	//	Number
60
	},
61
 
62
	//	basic statistics
63
	sd: function(/* Array */a){
64
		//	summary
65
		//	Returns the standard deviation of the passed arguments.
66
		return Math.sqrt(this.variance(a));	//	Number
67
	},
68
	variance: function(/* Array */a){
69
		//	summary
70
		//	Find the variance in the passed array of numbers.
71
		var mean=0, squares=0;
72
		dojo.forEach(a, function(item){
73
			mean+=item;
74
			squares+=Math.pow(item,2);
75
		});
76
		return (squares/a.length)-Math.pow(mean/a.length, 2);	//	Number
77
	},
78
 
79
	//	create a range of numbers
80
	range: function(/* Number */a, /* Number? */b, /* Number? */step){
81
		//	summary
82
		//	Create a range of numbers based on the parameters.
83
		if(arguments.length<2){
84
			b=a,a=0;
85
		}
86
		var s=step||1;
87
		var range=[];
88
		if(s>0){
89
			for(var i=a; i<b; i+=s){
90
				range.push(i);
91
			}
92
		}else{
93
			if(s<0){
94
				for(var i=a; i>b; i+=s){
95
					range.push(i);
96
				}
97
			}else{
98
				throw new Error("dojox.math.range: step must not be zero.");
99
			}
100
		}
101
		return range; 	// Array
102
	},
103
	distance: function(/* Array */a, /* Array */b){
104
		//	summary
105
		//	Calculate the distance between point A and point B
106
		return Math.sqrt(Math.pow(b[0]-a[0],2)+Math.pow(b[1]-a[1],2));	//	Number
107
	},
108
	midpoint: function(/* Array */a, /* Array */b){
109
		//	summary
110
		//	Calculate the midpoint between points A and B.  A and B may be multidimensional.
111
		if(a.length!=b.length){
112
			console.error("dojox.math.midpoint: Points A and B are not the same dimensionally.", a, b);
113
		}
114
		var m=[];
115
		for(var i=0; i<a.length; i++){
116
			m[i]=(a[i]+b[i])/2;
117
		}
118
		return m;	//	Array
119
	}
120
});
121
 
122
}