public static double intersection( LineParametric2D_F64 target, LineSegment2D_F64 l ) {
		double a1 = l.b.x - l.a.x;
		double b1 = l.b.y - l.a.y;

		double top = target.slope.y * ( l.a.x - target.p.x ) + target.slope.x * ( target.p.y - l.a.y );
		double bottom = target.slope.x * b1 - target.slope.y * a1;

		if( bottom == 0 )
			return Double.NaN;

		double t_1 = top / bottom;

		// does not intersect along the second line segment
		if( t_1 < 0 || t_1 > 1 )
			return Double.NaN;

		top = b1 * ( target.p.x - l.a.x ) + a1 * ( l.a.y - target.p.y );
		bottom = a1 * target.slope.y - b1 * target.slope.x;

		return top / bottom;
	}
public static double intersection ( LineParametric2D_F64 target , LineSegment2D_F64 l ) { double a1 = l . b . x - l . a . x ; double b1 = l . b . y - l . a . y ; double top = target . slope . y * ( l . a . x - target . p . x ) + target . slope . x * ( target . p . y - l . a . y ) ; double bottom = target . slope . x * b1 - target . slope . y * a1 ; if ( bottom == 0 ) return Double . NaN ; double t_1 = top / bottom ; if ( t_1 < 0 || t_1 > 1 ) return Double . NaN ; top = b1 * ( target . p . x - l . a . x ) + a1 * ( l . a . y - target . p . y ) ; bottom = a1 * target . slope . y - b1 * target . slope . x ; return top / bottom ; }
Finds the point of intersection between a line and a line segment.  The point of intersection
is specified as the distance along the parametric line.  If no intersection is found then
Double.NaN is returned.

@param target A line whose location along which the point of intersection is being found.  Not modified.
@param l	  Line segment which is being tested for intersection. Not modified.
@return The location along 'target'.  If the lines do not intersect or have infinite intersections Double.NaN is returned.