1. 程式人生 > >as3 點到線段最短距離 函式

as3 點到線段最短距離 函式

public function pointToLineDistance( p1:Point, p2:Point, p3:Point ) : Number 
{
var xDelta: Number = p2. x - p1. x ;
var yDelta: Number = p2. y - p1. y ;
if ( ( xDelta == 0 ) && ( yDelta == 0 ) ) {
// p1 and p2 cannot be the same point
p2. x += 1 ;
p2. y += 1 ;
xDelta = 1 ;
yDelta = 1 ;
}
var u: Number = ( ( p3. x - p1. x ) * xDelta + ( p3. y - p1. y ) * yDelta ) / ( xDelta * xDelta + yDelta * yDelta ) ;
var closestPoint:Point;
if ( u < 0 ) {
closestPoint = p1 ;
} else if ( u > 1 ) {
closestPoint = p2 ;
} else {
closestPoint = new Point ( p1. x + u * xDelta, p1. y + u * yDelta ) ;
}
return Point.distance ( closestPoint, p3 ) ;
}