123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- 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
- }
- });
- }
|