Subversion Repositories wimsdev

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /*
  2.         DynAPI Distribution
  3.         dynapi.functions.Math extension
  4.        
  5.         Math and Path functions
  6. */
  7.  
  8. var f = dynapi.functions;
  9. f.Math = {}; // used by dynapi.library
  10.  
  11. // Math Functions --------------------------
  12.  
  13. f.radianToDegree = function(radian) {
  14.         return radian*180/Math.PI
  15. };
  16. f.degreeToRadian = function(degree) {
  17.         return degree*Math.PI/180
  18. };
  19. f.sintable = function(lsin) {
  20.         for (var i=0; i<361; i+=1) lsin[i]=Math.sin((i/180)*Math.PI);
  21. };
  22. f.costable = function(lcos) {
  23.         for (var i=0; i<361; i+=1) lcos[i]=Math.cos((i/180)*Math.PI);
  24. };
  25. f.getRandomNumber = function(n) {
  26.         var t=new Date();
  27.         n=(n)? n: parseInt(Math.random()*10000);
  28.         return Math.round((Math.abs(Math.sin(t.getTime()))*(Math.random()*1000)))%n+1;
  29. };
  30. f.getGUID = function() { // Globally Unique ID
  31.         var n1,n2,n3,n4;
  32.         var l,r,m,c=Math.random()+''
  33.         c=c.substr(c.indexOf('.')+1);
  34.         m=(c.length-1)/2;
  35.         l=c.substr(0,m); r=c.substr(m);
  36.         n1=this.getRandomNumber(1000);
  37.         n2=this.getRandomNumber(255);n3=this.getRandomNumber(255);n4=this.getRandomNumber(255);
  38.         n2 = (n2 < 16 ? '0' : '') + n2.toString(16);
  39.         n3 = (n3 < 16 ? '0' : '') + n3.toString(16);
  40.         n4 = (n4 < 16 ? '0' : '') + n4.toString(16);   
  41.         return (n1+n2+'-'+l+'-'+n3+n4+'-'+r).toUpperCase();
  42. };
  43.  
  44. // Path Functions ------------------------
  45.  
  46. // Combines separate [x1,x2],[y1,y2] arrays into a path array [x1,y1,x2,y2]
  47. f.interlacePaths = function (x,y) {
  48.         var l = Math.max(x.length,y.length);
  49.         var a = new Array(l*2);
  50.         for (var i=0; i<l; i++) {
  51.                 a[i*2] = x[i];
  52.                 a[i*2+1] = y[i];
  53.         }
  54.         return a;
  55. };
  56.  
  57. // Returns correct angle in radians between 2 points
  58. f.getNormalizedAngle = function (x1,y1,x2,y2) {
  59.         var distx = Math.abs(x1-x2);
  60.         var disty = Math.abs(y1-y2);
  61.         if (distx==0 && disty==0) angle = 0;
  62.         else if (distx==0) angle = Math.PI/2;
  63.         else angle = Math.atan(disty/distx);
  64.         if (x1<x2) {
  65.                 if (y1<y2) angle = Math.PI*2-angle;
  66.         }
  67.         else {
  68.                 if (y1<y2) angle = Math.PI+angle;
  69.                 else angle = Math.PI-angle;
  70.         }
  71.         return angle;
  72. };
  73.  
  74. // Generates a path between 2 points in N steps
  75. f.generateLinePath = function(x1,y1,x2,y2,N) {
  76.         if (N==0) return [];
  77.         var dx = (x2 == x1)? 0 : (x2 - x1)/N;
  78.         var dy = (y2 == y1)? 0 : (y2 - y1)/N;
  79.         var path = new Array();
  80.         for (var i=0;i<=N;i++) {
  81.                 path[i*2] = Math.round(x1 + i*dx);
  82.                 path[i*2+1] = Math.round(y1 + i*dy);
  83.         }
  84.         return path;
  85. };
  86.