flash on 2012-10-17

by mutantleg
♥0 | Line 78 | Modified 2012-11-08 19:49:22 | 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/zPkV
 */

package {
    import flash.text.TextField;
    import flash.utils.Proxy;
    import flash.events.Event;
    import flash.geom.Point;
    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 p0:Point = new Point(53,33);
        public var p1:Point = new Point(70,250);
        public var p2:Point = new Point(300, 90);
        public var p3:Point = new Point(50, 400);
        
        public var deb:TextField;
        
        public function onEnter(e:Event):void
        {
            p3.x = mouseX;
            p3.y = mouseY;
            
            graphics.clear();
            
            graphics.lineStyle(2, 0);
            
            graphics.moveTo(p0.x, p0.y);
            graphics.lineTo(p1.x, p1.y);
            
            graphics.lineStyle(2,0xFF0000);
            
            graphics.moveTo(p2.x, p2.y);
            graphics.lineTo(p3.x, p3.y);
            
            graphics.lineStyle(2, 0);
            
            var t:Number;
             t= lineLineInter(p0,p1,p2,p3);
             //if (t != 999)
             
              //graphics.drawCircle(p0.x+(p1.x-p0.x)*t,p0.y+(p1.y-p0.y)*t, 8);   
                 
                 var kx:Number;
                 var ky:Number;
                 kx = p0.x + (p1.x - p0.x) * t;
                 ky = p0.y + (p1.y - p0.y) * t;
                 
                 
                 var u:Number;
                 
                  u= t;
                  if (u < 0) { u = 0;}
                  if (u > 1) { u = 1;}
                 /*
                 u = getClosep(kx, ky, p0.x,p0.y, p1.x,p1.y);
            */
                 var jx:Number;
                 var jy:Number;
                 jx = p0.x + (p1.x - p0.x) * u;
                 jy = p0.y + (p1.y - p0.y) * u;
                 
                 deb.text = "t:"+t +" u: " +u;
                 
                 
                 graphics.drawCircle(kx,ky, 8);
                 graphics.drawCircle(jx,jy, 4);
                 
         }//onenter
        

         
         public function lineLineInter(v0:Point, v1:Point, v2:Point, v3:Point):Number
         {
             var ua:Number;
             var ub:Number;
             var bot:Number;
             
             bot = ((v3.y-v2.y)*(v1.x-v0.x))-((v3.x-v2.x)*(v1.y-v0.y));
             if (bot == 0) { return 999;}
             
              ua = (((v3.x-v2.x)*(v0.y-v2.y))-((v3.y-v2.y)*(v0.x-v2.x))) / bot;
              ub = (((v1.x-v0.x)*(v0.y-v2.y))-((v1.y-v0.y)*(v0.x-v2.x))) / bot;
             // if (ua > 1 || ua < 0 || ub > 1 || ub < 0) { return 999; }
                 if (ub > 1 || ub < 0) { return 999; }
              return ua;

         }//lineline
         
         
         
         public function getClosep(px:Number, py:Number, 
         ax:Number, ay:Number, bx:Number, by:Number):Number
         {
             var vx:Number;
             var vy:Number;
             var dx:Number;
             var dy:Number;
             var h:Number;
             var dotv:Number;
             
             vx = bx - ax;
             vy = bx - ay;
             
             dx = px - ax;
             dy = py - ay;
             
             h = (vx*dx + vy*dy) / (vx*vx + vy*vy);
             //if (h < 0.0) { h = 0.0; }
             //if (h > 1.0) { h = 1.0; }
             
             
             return h;
         }//getclose
        
        
        
    }//classend
}