Расстояние от точки до отрезка

Определение. Расстояние от точки до отрезка — это минимальное расстояние от данной точки до любой точки на этом отрезке.

Это расстояние может быть либо длиной перпендикуляра, опущенного из точки на отрезок (если проекция точки попадает внутрь отрезка),

либо расстоянием до одного из концов отрезка (если проекция точки выходит за пределы отрезка).

Если треугольник, вершинами которого является данная точка и концы заданного отрезка, является тупоугольным (проверка на тупоугольность проводится рассмотрением знака скалярного произведения соответствующих векторов, построенных на сторонах треугольника (косинус тупого угла отрицательный)) (т. е. из данной точки невозможно опустить перпендикуляр на данный отрезок), то расстоянием от точки до отрезка считается минимальное расстояние от данной точки, до одного из концов отрезка. Оно определяется с помощью формулы:

$$Dist = \sqrt{ (x_1 - x_2)^2 + (y_1 - y_2)^2}$$

Если все же перпендикуляр опустить возможно, то расстоянием от точки до отрезка считается длина этого перпендикуляра. Ее можно определить двумя способами:
1) посчитав площадь треугольника по двум формулам:
Площадь треугольника равна половине произведения его основания (c) на высоту (h):
$$ S = \frac{1}{2} c h$$

Площадь треугольника равна половине произведения сторон (a,b) на синус угла между ними:

$$ S = \frac{1}{2} ab \sin \theta $$

Приравниваем эти равенства и находим высоту:

$$h = \frac{ab \sin \theta}{с} $$

2) можем определить координаты точки пресечения отрезка с перепендикуляром, опущенным из данной точки на отрезок и посчитать расстояние между двумя точками.

Для этого сначала нам надо найти уравнение перпендикуляра к данной прямой, проходящего через данную точку, затем решить систему уравнений (k и l - координаты вершины перпендикуляра, x1, y1, x2, y2 - координаты концов отрезка):

$$(x - x_1)(y_2 - y_1) = (y - y_1)(x_2 - x_1)\\
(x - k)(x_2 - x_1) = - (y - l)(y_2 - y_1)
$$

Если (x2 - x1) = 0, то решение:
x = x1
y = l
.

Если (y2 - y1) = 0, то решение:
y = y1
x = k
.

В остальных случаях (пусть (x2 - x1) = α, (y2 - y1) = β):
x = (α / β) (y - y1) + x1
y = ((α2 / β)y1 + α (k - x1) + βl) / ((α2 / β) + β)
.