Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  private function getPositiveOrientedAngle(refCell:Point, cellA:Point, cellB:Point) : Number
  2.       {
  3.          switch(this.compareAngles(refCell,cellA,cellB))
  4.          {
  5.             case SAME:
  6.                return 0;
  7.             case OPPOSITE:
  8.                return Math.PI;
  9.             case TRIGONOMETRIC:
  10.                return this.getAngle(refCell,cellA,cellB);
  11.             case COUNTER_TRIGONOMETRIC:
  12.                return 2 * Math.PI - this.getAngle(refCell,cellA,cellB);
  13.             default:
  14.                return 0;
  15.          }
  16.       }
  17.      
  18.       private function compareAngles(ref:Point, start:Point, end:Point) : int
  19.       {
  20.          var aVec:Point = this.vector(ref,start);
  21.          var bVec:Point = this.vector(ref,end);
  22.          var det:int = this.getDeterminant(aVec,bVec);
  23.          if(det != 0)
  24.          {
  25.             return det > 0?int(TRIGONOMETRIC):int(COUNTER_TRIGONOMETRIC);
  26.          }
  27.          return aVec.x >= 0 == bVec.x >= 0 && aVec.y >= 0 == bVec.y >= 0?int(SAME):int(OPPOSITE);
  28.       }
  29.      
  30.       private function getAngle(coordRef:Point, coordA:Point, coordB:Point) : Number
  31.       {
  32.          var a:Number = this.getComplexDistance(coordA,coordB);
  33.          var b:Number = this.getComplexDistance(coordRef,coordA);
  34.          var c:Number = this.getComplexDistance(coordRef,coordB);
  35.          return Math.acos((b * b + c * c - a * a) / (2 * b * c));
  36.       }
  37.      
  38.       private function getComplexDistance(ref_start:Point, ref_end:Point) : Number
  39.       {
  40.          return Math.sqrt(Math.pow(ref_start.x - ref_end.x,2) + Math.pow(ref_start.y - ref_end.y,2));
  41.       }
  42.      
  43.       private function getDeterminant(aVec:Point, bVec:Point) : int
  44.       {
  45.          return aVec.x * bVec.y - aVec.y * bVec.x;
  46.       }
  47.      
  48.       private function vector(start:Point, end:Point) : Point
  49.       {
  50.          return new Point(end.x - start.x,end.y - start.y);
  51.       }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement