JAVASCRIPT   104

MathEx js

Guest on 31st May 2022 01:59:20 AM

  1. /**
  2.  * @author Tom
  3.  */
  4.  
  5. function Point(x, y) {
  6.         if (!exists(x)) {
  7.                 this.x = 0;
  8.                 this.y = 0;
  9.         } else if (isObject(x)) {
  10.                 this.x += x.x;
  11.                 this.y += x.y;
  12.         } else if (!exists(y)) {
  13.                 this.x = x;
  14.                 this.y = x;
  15.         } else {
  16.                 this.x = x;
  17.                 this.y = y;
  18.         }
  19. }
  20.  
  21. Point.fromPolar = function(r, a) {
  22.         return new Point(r * Math.cos(a), r * Math.sin(a));
  23. };
  24.  
  25. Point.fromArray = function(array) {
  26.         return new Point(array[0], array[1]);
  27. };
  28.  
  29. Point.fromVector = function(source, destination) {
  30.         return new Point(destination.x - source.x, destination.y - source.y);
  31. };
  32.  
  33. Point.prototype = {
  34.         fromPolar: function(r, a) {
  35.                 this.x = r * Math.cos(a);
  36.                 this.y = r * Math.sin(a);
  37.                 return this;
  38.         },
  39.         fromArray: function(array) {
  40.                 this.x = array[0];
  41.                 this.y = array[1];
  42.                 return this;
  43.         },
  44.         toArray: function() {
  45.                 return [this.x, this.y];
  46.         },
  47.         getRadius: function() {
  48.                 return Math.sqrt(MathEx.sqr(this.x) + MathEx.sqr(this.y));
  49.         },
  50.         getAngle: function() {
  51.                 return Math.atan2(this.y, this.x);
  52.         },
  53.         move: function(x, y) {
  54.                 if (isObject(x)) {
  55.                         this.x += x.x;
  56.                         this.y += x.y;
  57.                 } else {
  58.                         this.x += x;
  59.                         this.y += y;
  60.                 }
  61.                 return this;
  62.         },
  63.         scale: function(x, y) {
  64.                 if (isObject(x)) {
  65.                         this.x *= x.x;
  66.                         this.y *= x.y;
  67.                 } else if (!exists(y)) {
  68.                         this.x *= x;
  69.                         this.y *= x;
  70.                 } else {
  71.                         this.x *= x;
  72.                         this.y *= y;
  73.                 }
  74.                 return this;
  75.         },
  76.         getOffset: function(x, y) {
  77.                 return new Point(this.x - x, this.y - y);
  78.         },
  79.         placeToCircle: function(cx, cy, r) {
  80.                 var o = this.getOffset(cx, cy);
  81.                 var or = o.getRadius();
  82.                 if (or > r) {
  83.                         this.fromPolar(r, o.getAngle());
  84.                         this.move(cx, cy);
  85.                 }
  86.                 return this;
  87.         },
  88.         setMinimum: function(x, y) {
  89.                 if (x < this.x) {
  90.                         this.x = x;
  91.                 }
  92.                 if (y < this.y) {
  93.                         this.y = y;
  94.                 }
  95.         },
  96.         setMaximum: function(x, y) {
  97.                 if (x > this.x) {
  98.                         this.x = x;
  99.                 }
  100.                 if (y > this.y) {
  101.                         this.y = y;
  102.                 }
  103.         }
  104. };
  105.  
  106. var Rad = {};
  107.  
  108. times(4, function(value) {
  109.         Rad["q" + (value + 1)] = Math.PI * (value + 1) / 2;
  110. });
  111.  
  112. var MathEx = {
  113.         sqr: function(value) {
  114.                 return value * value;
  115.         },
  116.         degToRad: function(value) {
  117.                 return value * Math.PI / 180;
  118.         },
  119.         radToDeg: function(value) {
  120.                 return value * 180 / Math.PI;
  121.         },
  122.         getLength: function(pt1, pt2) {
  123.                 return Point.fromVector(pt1, pt2).getRadius();
  124.         },
  125.         getPolylineLength: function(points) {
  126.                 var length = 0;
  127.                 var previous = null;
  128.                 each(points, function(point) {
  129.                         if (exists(previous)) {
  130.                                 length += MathEx.getLength(previous, point);
  131.                         }
  132.                         previous = point;
  133.                 });
  134.                 return length;
  135.         },
  136.         getPointOnPolyline: function(points, offset) {
  137.                 var pp = null;
  138.                 var previous = null;
  139.                 var result = lookup(points, function(point) {
  140.                         if (exists(previous)) {
  141.                                 var vector = Point.fromVector(previous, point);
  142.                                 var length = vector.getRadius();
  143.                                 if (offset < length) {
  144.                                         var angle = vector.getAngle();
  145.                                         vector.scale(offset / length).move(previous);
  146.                                         vector.angle = angle;
  147.                                         return vector;
  148.                                 }
  149.                                 offset -= length;
  150.                         }
  151.                         pp = previous;
  152.                         previous = point;
  153.                 });
  154.                 if (!exists(result)) {
  155.                         result = new Point(previous);
  156.                         result.angle = MathEx.radToDeg(Point.fromVector(pp, previous).getAngle());
  157.                 }
  158.                 return result;
  159.         }
  160. };
  161.  
  162. function even(number) {
  163.         return number % 2 === 0;
  164. }
  165.  
  166. function odd(number) {
  167.         return number % 2 !== 0;
  168. }

Raw Paste


Login or Register to edit or fork this paste. It's free.