using System;
namespace DistanceTask
{
public static class DistanceTask
{
// Расстояние от точки (x, y) до отрезка AB с координатами A(ax, ay), B(bx, by)
public static double GetDistanceToSegment(double ax, double ay, double bx, double by, double x, double y)
{
double ac = Math.Sqrt(Math.Pow(x - ax, 2) + Math.Pow(y - ay, 2));
double ab = Math.Sqrt(Math.Pow(bx - ax, 2) + Math.Pow(by - ay, 2));
double bc = Math.Sqrt(Math.Pow(x - bx, 2) + Math.Pow(y - by, 2));
if((x==ax&&y==ay)||(x==bx&y==by)) return 0;
else if (((Math.Pow(ac, 2) + Math.Pow(bc, 2)) >= Math.Pow(ab, 2)) || (Math.Pow(ab, 2) + Math.Pow(bc, 2) >= Math.Pow(ac, 2)))
{
double result1 = Math.Abs((ay - by) * x + (bx - ax) * y + (ax * by - bx * ay));
double result2 = Math.Sqrt((by-ay)*(by - ay) +(bx-ax)* (bx - ax));
double result = result1 / result2;
if(Double.IsNaN(result))
return 0;
return result;
}
else return Math.Min(ac, ab);
}
}
}
Напишите метод вычисления расстояния от отрезка до точки. Для проверки своего решения запустите скачанный проект.
Расстоянием от отрезка до точки называется расстояние от ближайшей точки отрезка до точки. Это либо расстояние до точки от прямой, содержащей отрезок, либо расстояние до точки от одного из концов отрезка.