forked from: Node Proximity / Distance Formula

by bradsedito forked from Node Proximity / Distance Formula (diff: 1)
♥0 | Line 81 | Modified 2012-03-11 09:32:12 | MIT License
play

ActionScript3 source code

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

// forked from bradsedito's Node Proximity / Distance Formula
package
{
    import flash.display.*;
    import flash.events.*;
    import flash.text.*;
    import flash.geom.*;
    import com.greensock.*;
    import com.greensock.easing.*;


    public class DistPL extends Sprite
    {
        
        public function DistPL()
        {
            function pointToLineDist(x1:Number, y1:Number, x2:Number, y2:Number,x3:Number, y3:Number):Number 
            //function pointToLineDist(x1:Number,y1:Number,z1:Number, x2:Number,y2:Number,z2:Number, x3:Number, y3:Number,z3:Number ):Number 
            {
                var dx:Number = (x2-x1);
                var dy:Number = (y2-y1);
                //var dz:Number = (z2-z1);
                
                /* if (dx==0 && dy==0 && dz==0) 
                {
                    
                }  */

                if (dx==0&&dy==0) 
                {
                    x2+=1;
                    y2+=1;
                    //z2+=1;
                    
                    dx = dy = 1;
                    //dx = dy = dz = 1;
                }
                
                var u:Number = ((x3 - x1) * dx + (y3 - y1) * dy) / (dx * dx + dy * dy);
                //var u:Number=(   ((x3 - x1)*dx) + ((y3-y1)*dy) + ((z3-z1)*dz)  )/(  dx*dx + dy*dy + dz*dz  );
                var closestX:Number;
                var closestY:Number;
                var closestz:Number;
                
                if (u<0) 
                {
                    closestX=x1;
                    closestY=y1;
                  //closestZ=z1;
                } 
                else if (u> 1) 
                {
                    closestX=x2;
                    closestY=y2;
                  //closestZ=z2;
                } 
                else 
                {
                    closestX=x1+u*dx;
                    closestY=y1+u*dy;
                  //closestZ=z1+u*dz;
                }
                
                dx = closestX-x3;
                dy = closestY-y3;
              //dz = closestY-y3;
             
                return Math.sqrt(dx * dx +  dy * dy);
        }
 
        var dotA:Sprite = dot( 50, 100);
        var dotB:Sprite = dot( 50, 400);
        var dotC:Sprite = dot(100, 250, 0x0000FF);
        var txt:TextField = TextField(dotC.addChild(new TextField()));
        with(txt) x=5, y=0, autoSize = "left", selectable = false, mouseEnabled = false;
         
        addEventListener(Event.ENTER_FRAME, onLoop);
        
        function onLoop(evt:Event):void 
        {
            graphics.clear();
            graphics.lineStyle(0,0x000000);
            graphics.moveTo(dotA.x, dotA.y);
            graphics.lineTo(dotB.x, dotB.y);
            txt.text = pointToLineDist(dotA.x, dotA.y, dotB.x, dotB.y, dotC.x, dotC.y).toFixed(2);
        }
         
        function dot( xp:Number,yp:Number,col:uint=0xFF0000,rad:Number=4 ):Sprite 
        {
            var s:Sprite = Sprite(addChild(new Sprite));
            s.x = xp;
            s.y = yp;
            with(s.graphics) beginFill(col), drawCircle(0,0,rad);
            s.buttonMode = true;
            s.addEventListener(MouseEvent.MOUSE_DOWN, onDrag);
            return s;
        }


        
        function onDrag(evt:MouseEvent):void 
        { 
            evt.currentTarget.startDrag() 
        }
        
        stage.addEventListener(MouseEvent.MOUSE_UP, onUp);
        
        function onUp(evt:MouseEvent):void
        {
            stopDrag(); 
        }
    }
}
}