@Urukhayy

Как найти длину перпендикуляра с точки на отрезок?

Есть точка A(x,y).
Есть отрезок с началом B(x1,y1) и концом C(x2,y2).

Требуется найти перпендикуляр, опущенный с точки на отрезок.

Я попробовал сделать по формуле высоты треугольника - www.fxyz.ru/%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB%D...
Но дело в том, что если точка лежит не над отрезком (то есть под точкой пустота), то результат будет таким, словно отрезок все равно под точкой. Иначе говоря, будто отрезок бесконечный.
  • Вопрос задан
  • 8023 просмотра
Решения вопроса 1
Mrrl
@Mrrl
Заводчик кардиганов
double L=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
double PR=(x-x1)*(x2-x1)+(y-y1)*(y2-y1);
bool res=true;
double cf=PR/L;
if(cf<0){ cf=0; res=false; }
if(cf>1){ cf=1; res=false; }
double xres=x1+cf*(x2-x1);
double yres=y1+cf*(y2-y1);

В (xres,yres) будут координаты ближайшей точки отрезка, а переменная res покажет, перпендикуляр получился, или нет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Перпендикулярную к прямой прямую, проходящую через заданную точку, можно построить единственным способом. Если ваш отрезок не содержит точку пересечения с перпендикуляром, то перпендикуляр "к отрезку" построить невозможно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы