У вас есть три зоны для рассмотрения.«Перпендикулярный» подход предназначен для зоны в середине:
Для двух других зон расстояние - это расстояние до ближайшей конечной точки сегмента.
Уравнение для сегмента:
y[x] = m x + b
Где
m -> -((Ay - By)/(-Ax + By)),
b -> -((-Ax By + Ay By)/(Ax - By))
И перпендикуляры имеют наклон -1 / м
Уравнения для перпендикулярного прохождения через A:
y[x] = (-Ax + By)/(Ay - By) x + (Ax^2 + Ay^2 - Ax By - Ay By)/(Ay - By)
И перпендикулярное прохождение через B - это то же самое, что и А и В в приведенном выше уравнении.
Таким образом, вы можете узнать, в какой области находится ваша точка, введя ее координату x в приведенных выше уравнениях, а затем сравнив координату y точки с результатом y [x]
Edit
Как узнать, в каком регионе находится ваша точка?
Предположим, что Ax ≤ Bx (если все иначе, просто измените метки точек в следующих формулах)
Мы назовем вашу точку {x0, y0}
1) Рассчитайте
f[x0] = (-Ax + By)/(Ay - By) x0 + (Ax^2 + Ay^2 - Ax By - Ay By)/(Ay - By)
и сравните с y0.
Если y0> f [x0], то ваша точка находится в зеленом поле на рисунке выше, а ближайшая точка - A.
2) Иначе, вычислите
g[x0] = (-Bx + Ay)/(By - Ay) x0 + (Bx^2 + By^2 - Bx Ay - By Ay)/(By - Ay)
и сравните с y0.
Если y0
3) Иначе, вы находитесь в «перпендикулярной светло-голубой зоне», и любой другой ответ подскажет вам, как рассчитать ближайшую точку и расстояние (я не собираюсьПлагиат :))
HTH!