Страница 1 из 1
Построение прямой кратчайшего расстояния от точки к полилини
Добавлено: 11 авг 2013, 21:47
IVTarasenko
Задача в следующем:
как от точек, например адресов, построить прямую кратчайшего расстояния к полилинии, например улице.
С помощью
ObjectDistance( точки.obj, полилинии.obj, "m" ) нахожу, вроде бы как, кратчайшее расстояние.
А что бы создать линию уже нужны координаты центроидов. Координаты центроида точки можно задать, а вот полилинии-не подходит, так как расстояния уже не будут минимальными, нужно к ближайшей точке полилинии, а не к центру.
Если кто-то знает как это сделать подскажите, пожалуйста. Готовые утилиты, которые это умеют-не предлагать

Может можно это как нибудь сделать через прямую геодезическую задачу? Есть координаты точки, расстояние к полилинии, можно узнать азимут(можно ли?) и через приросты координат задать значения Х и У для ближайшей точки полилинии? или неверное направление?
Re: Построение прямой кратчайшего расстояния от точки к поли
Добавлено: 12 авг 2013, 08:29
trir
Кратчайшее расстояние от прямой к точке - это нормаль, зная уравнение прямой можно получить уравнение нормали и точку пересечения. Только полилиния состоит из отрезков и точка пересечения может не лежать на отрезке, в этом случае надо брать ближайшую вершину отрезка
Re: Построение прямой кратчайшего расстояния от точки к поли
Добавлено: 12 авг 2013, 10:24
IVTarasenko
Спасибо! Как-то это на ум и не пришло. Осталось вспомнить школьную геометрию

Re: Построение прямой кратчайшего расстояния от точки к поли
Добавлено: 12 авг 2013, 12:29
Sibit
Если получилось вычислить расстояние, то можно попробовать построить окружность с радиусом расстояния из точки, а потом найти точки пересечения с полилинией. Вроде должно проще получиться.
Re: Построение прямой кратчайшего расстояния от точки к поли
Добавлено: 12 авг 2013, 13:51
dab
IVTarasenko писал(а):Осталось вспомнить школьную геометрию

http://algolist.manual.ru/maths/geom/di ... ntline.php 
Re: Построение прямой кратчайшего расстояния от точки к поли
Добавлено: 12 авг 2013, 15:31
IVTarasenko
О да, это как раз то, что мы проходили в 9 классе

Спасибо

Re: Построение прямой кратчайшего расстояния от точки к поли
Добавлено: 13 авг 2013, 06:42
Sibit
Я думаю, что вычислять расстояние получится сильно муторно. Т.е. для каждого сегмента надо будет вычислить расстояние по нормали, потом выяснить, попадает ли нормаль на сегмент. Если нет - выбрать вершину с минимальным расстоянием.
Я предлагаю сделать как на 1-ом рисунке. Т.е. Вычислить расстояние между точкой и полилинией - ObjectDistance(Полилиния,Точка, "m") (далее dist). Построить окружность с радиусом dist.
Но тут первые вилы : ObjectDistance между точкой и полилинией считается с некоторой погрешностью(у меня полученная окружность не доходила на 50 метров). Можно вычислить расстояние между полученной окружностью и полилинией добавить его к dist и еще раз построить окружность. После этого, получить пересечение окружности и полилинии.
Вторые вилы : итог пересечения полилиния из 2-х точек. И тут 2 варианта: между ними есть вершина, или нет. В первом случае - находим середину и вот наша искомая точка. Во втором случае, надо найти эту вершину. Самый простой вариант - перебором найти ближайшую к полученной полилинии. Но здесь необходимо смотреть на достаточную точность.
Ну и трети вилы : из за дискретности координат, возможны странные результаты пересечения. Рис. 2 - пересечение с окружностью, полученное пересечение - маленькая синяя точка(на самом деле это PolyLine с одним сегментом из 2-х точек ). Рис.3 - при тех же начальных, я преобразовал окружность(эллипс) в полилинию. Результат - синяя линия(тоже PolyLine).
Re: Построение прямой кратчайшего расстояния от точки к поли
Добавлено: 13 авг 2013, 09:00
IVTarasenko
Спасибо за помощь

Варианты, конечно, сложные,

будем пробовать - посмотрим, что получится.