Другие языки программирования и технологии
Кратчайшее расстояние от точки до отрезка на плоскости (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));
Дальше теорема косинусов вам в помощь
double d = fabs(a * x + b * y + c) / sqrt(pow(a, 2) + pow(b, 2));
Дальше теорема косинусов вам в помощь
Я бы решал через скалярные произведения, потому что у меня так рука набита. Скалярные произведения векторов очень просто выражаются через координаты (как сумма произведений соответствующих координат) .
Для начала сдвиньте ноль в точку x1,y1 (координаты всех трех точек пересчитайте) .
Разложите вектор с координатами Вашей точки на два вектора - сонаправленному с прямой и перпендикулярному ему. Через скалярные произведения ракладывайте.
Ну и потом сдвиньте все обратно на x1, y1.
Никаких особых теорем косинусов я здесь не вижу, но мне с векторами комфортнее жить, чем с курсом школьной геометрии.
Для начала сдвиньте ноль в точку x1,y1 (координаты всех трех точек пересчитайте) .
Разложите вектор с координатами Вашей точки на два вектора - сонаправленному с прямой и перпендикулярному ему. Через скалярные произведения ракладывайте.
Ну и потом сдвиньте все обратно на x1, y1.
Никаких особых теорем косинусов я здесь не вижу, но мне с векторами комфортнее жить, чем с курсом школьной геометрии.
Тут программисты сидят. Сначала нужно решить задачу по геометрии, а потом задавать такой вопрос в этом разделе подробно расписав, как найти это самое расстояние.
P.S. Условие неверно. Не из любой точки на плоскости можно провести перпендикуляр к отрезку.
Например вот отрезок и точка: \ .
Таким образом расстояние от точки до отрезка будет рассояние от точки до одного из краев отрезка, если перпендикуляр провести нельзя, или будет расстояние от точки до точки пересечения отрезка и перпендикуряра, проведенного через точку
P.S. Условие неверно. Не из любой точки на плоскости можно провести перпендикуляр к отрезку.
Например вот отрезок и точка: \ .
Таким образом расстояние от точки до отрезка будет рассояние от точки до одного из краев отрезка, если перпендикуляр провести нельзя, или будет расстояние от точки до точки пересечения отрезка и перпендикуряра, проведенного через точку
Похожие вопросы
- В трехмерном пространстве есть отрезок и плоскость. Не могу найти их пересечение C#
- принадлежит ли точка X отрезку АВ на паскале
- Pascal. Даны координаты начала и конца отрезка. Определить координаты всех точек этого отрезка.
- Помогите написать программу на С++: Заданы отрезки a,b,c,d. Проверить, могут ли они служить сторонами прямоугольника
- Разработать класс описывающий множество точек на плоскости, реализовать метод который возвращает наименьшее расстояние
- C++ Вывести сообщение о том, какая из точек ближе к началу координат, и все соответствующие расстояния.
- Знатокам AutoCAD!!! Не могу ввести вторую координату точки отрезка.
- С++ программирование функций. а плоскости заданы своими координатами n точек...
- С/C++ программисту изучить turbo pascal 7 в короткие сроки (вынужденная необходимость)
- Непонятка с C++. Хочу посчитать колво точек в строке и почему то на 1 больше считает