Guest User

Untitled

a guest
Jul 19th, 2018
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. public function arc(x:Number, y:Number, radius:Number, startAngle:Number, endAngle:Number, anticlockwise:Boolean = false):void
  2.         {
  3.             if (!isFinite(x) || !isFinite(y) || !isFinite(radius) ||
  4.                             !isFinite(startAngle) || !isFinite(endAngle))
  5.             {
  6.                 return;
  7.             }
  8.  
  9.             var startX:Number = x + radius * Math.cos(startAngle);
  10.             var startY:Number = y + radius * Math.sin(startAngle);
  11.  
  12.             // check that path contains subpaths
  13.             if (path.length == 0)
  14.             {
  15.                 moveTo(startX, startY);
  16.             }
  17.             else
  18.             {
  19.                 lineTo(startX, startY);
  20.  
  21.             }
  22.             if (startAngle == endAngle)
  23.             {
  24.                 return;
  25.             }
  26.  
  27.             var theta:Number = endAngle - startAngle;
  28.             var PI2:Number = Math.PI * 2;
  29.  
  30.             if (anticlockwise)
  31.             {
  32.                 if (theta <= -PI2)
  33.                 {
  34.                     theta = PI2;
  35.                 }
  36.                 else
  37.                 {
  38.                     while (theta >= 0)
  39.                     {
  40.                         theta -=  PI2;
  41.                     }
  42.                 }
  43.             }
  44.             else
  45.             {
  46.                 if (theta >= PI2)
  47.                 {
  48.                     theta = PI2;
  49.                 }
  50.                 else
  51.                 {
  52.                     while (theta <= 0)
  53.                     {
  54.                         theta +=  PI2;
  55.                     }
  56.  
  57.                 }
  58.             }
  59.             var angle:Number = startAngle;
  60.             var segments:Number  = Math.ceil(Math.abs(theta) / (Math.PI / 4));
  61.             var delta:Number = theta / (segments * 2);
  62.             var radiusMid:Number = radius / Math.cos(delta);
  63.  
  64.             for (var i:int = 0; i < segments; i++)
  65.             {
  66.  
  67.                 angle +=  delta;
  68.                 var cpx:Number = x + Math.cos(angle) * radiusMid;
  69.                 var cpy:Number = y + Math.sin(angle) * radiusMid;
  70.                 var cp:Point = state.matrix.transformPoint(new Point(cpx,cpy));
  71.  
  72.                 angle +=  delta;
  73.                 var apx:Number = x + Math.cos(angle) * radius;
  74.                 var apy:Number = y + Math.sin(angle) * radius;
  75.                 var ap:Point = state.matrix.transformPoint(new Point(apx,apy));
  76.  
  77.                 path.curveTo(cp.x, cp.y, ap.x, ap.y);
  78.  
  79.  
  80.             }
  81.  
  82.             if (theta == PI2)
  83.             {
  84.                 var endX:Number = x + radius * Math.cos(endAngle);
  85.                 var endY:Number = y + radius * Math.sin(endAngle);
  86.                 moveTo(endX, endY);
  87.             }
  88.             else
  89.             {
  90.                 path.curPoint.x = ap.x;
  91.                 path.curPoint.y = ap.y;
  92.                 //currentPoint.x = ap.x;
  93.                 //currentPoint.y = ap.y;
  94.             }
  95.         }
Add Comment
Please, Sign In to add comment