flash on 2013-11-14

by mutantleg
Followup to: http://wonderfl.net/c/Aguw
Same thing but without using sqrt or atan2
♥0 | Line 67 | Modified 2013-11-14 23:24:28 | MIT License
play

ActionScript3 source code

/**
 * Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/gEbX
 */

package {
    import flash.events.Event;
    import flash.text.TextField;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
  
            deb = new TextField();
            addChild(deb);
            
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public var deb:TextField;
        
        
        public function onEnter(e:Event):void
        {
            graphics.clear();
            graphics.lineStyle(2,0);
            
            var mx:Number;
            var my:Number;
            var ax:Number;
            var ay:Number;
            var ang:Number;
            var ang2:Number;
            var ang3:Number;
            
            mx  = stage.mouseX;
            my = stage.mouseY;
            
            ax = 200;
            ay = 200;
            
            ang = Math.atan2(my-ay,mx-ax);
            //ang3 = getAng(my-ay,mx-ax)*1.57075;
            ang = getAng(my-ay,mx-ax);
            
            //graphics.drawCircle(ax,ay,7);
            
            graphics.moveTo(ax,ay);
            graphics.lineTo(ax+Math.cos(ang)*16,ay+Math.sin(ang)*16);
           
           ang2 = 0;
           ang2 = 0.3; //1.57;
           ang2 = 6.2;
           
                 graphics.moveTo(ax,ay);
            graphics.lineTo(ax+Math.cos(ang2)*16,ay+Math.sin(ang2)*16);
      
             graphics.moveTo(ax,ay);
            graphics.lineTo(ax+Math.cos(ang2+0.785)*160,ay+Math.sin(ang2+0.785)*160);
      
             graphics.moveTo(ax,ay);
            graphics.lineTo(ax+Math.cos(ang2-0.785)*160,ay+Math.sin(ang2-0.785)*160);
      
           
           var str:String;
               str = ""+ang;
               str+="\n"+ang2;
             //  str+="\n"+ang3;
               
           var d:Number;
               d = ang - ang2;
               if (d > 3.14) { d-= 6.28; }
               if (d < -3.14) { d +=6.28;}
            
              str += "\n "+d;
               
             var see:Boolean;
             d = ((d < 0) ? -d : d);
             see = d < (3.1415*0.25);
              if (see)
              {
                   graphics.lineStyle(1,0);
                   graphics.moveTo(ax,ay);
                   graphics.lineTo(mx,my);   
              }
               
                
            deb.text = str;
            
            
            
        }//onenter
        
        //based on
        //http://stackoverflow.com/questions/16542042/fastest-way-to-sort-vectors-by-angle-without-actually-computing-that-angle
        public function getAng(dy:Number, dx:Number):Number
        {
            var a:Number;
            a = dx / ((dy<0?-dy:dy)+(dx<0?-dx:dx));
            if (dy < 0) { return (a-1)*1.57075; }
            return (1-a)*1.57075;
        }//getang
        
        
        
        
    }//classend
}