public static double DistanceLinePoint(Vector2D start, Vector2D end, Vector2D v, out Vector2D nearest)
        {
            Vector2D dir       = v - start;
            Vector2D borderDir = (end - start).Normalized( );
            double   dot       = borderDir.Dot(dir);

            if (dot < 0)
            {
                nearest = start;
                return((v - start).Length);
            }
            if (dot > (end - start).Length)
            {
                nearest = end;
                return((v - end).Length);
            }
            Vector2D tangent = borderDir * dot;

            nearest = start + tangent;
            Vector2D normal = dir - tangent;

            return(normal.Length);
        }