forked from: Node Proximity / Distance Formula
forked from Node Proximity / Distance Formula (diff: 1)
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();
}
}
}
}