Другие языки программирования и технологии

Кратчайшее расстояние от точки до отрезка на плоскости (C++)

Есть точка (int px,py) и отрезок (int x1,y1,x2,y2). Нужно переместить точку на ближайшую часть линии (перпендикулярно).. ю
Если задано уравнение прямой Ax + By + C = 0, то расстояние от точки M(x, y) до прямой можно найти, используя следующую формулу
double d = fabs(a * x + b * y + c) / sqrt(pow(a, 2) + pow(b, 2));
Дальше теорема косинусов вам в помощь
Максут Темиркан Уулу
Максут Темиркан Уулу
58 395
Лучший ответ
Я бы решал через скалярные произведения, потому что у меня так рука набита. Скалярные произведения векторов очень просто выражаются через координаты (как сумма произведений соответствующих координат) .

Для начала сдвиньте ноль в точку x1,y1 (координаты всех трех точек пересчитайте) .

Разложите вектор с координатами Вашей точки на два вектора - сонаправленному с прямой и перпендикулярному ему. Через скалярные произведения ракладывайте.
Ну и потом сдвиньте все обратно на x1, y1.

Никаких особых теорем косинусов я здесь не вижу, но мне с векторами комфортнее жить, чем с курсом школьной геометрии.
Юрий Старухин
Юрий Старухин
19 662
Тут программисты сидят. Сначала нужно решить задачу по геометрии, а потом задавать такой вопрос в этом разделе подробно расписав, как найти это самое расстояние.
P.S. Условие неверно. Не из любой точки на плоскости можно провести перпендикуляр к отрезку.
Например вот отрезок и точка: \ .
Таким образом расстояние от точки до отрезка будет рассояние от точки до одного из краев отрезка, если перпендикуляр провести нельзя, или будет расстояние от точки до точки пересечения отрезка и перпендикуряра, проведенного через точку

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