Построение прямой кратчайшего расстояния от точки к полилини

MapInfo, MapBasic
Ответить
IVTarasenko
Новоприбывший
Сообщения: 13
Зарегистрирован: 14 окт 2010, 23:16
Репутация: 1

Построение прямой кратчайшего расстояния от точки к полилини

Сообщение IVTarasenko » 11 авг 2013, 21:47

Задача в следующем:
как от точек, например адресов, построить прямую кратчайшего расстояния к полилинии, например улице.
С помощью ObjectDistance( точки.obj, полилинии.obj, "m" ) нахожу, вроде бы как, кратчайшее расстояние.
А что бы создать линию уже нужны координаты центроидов. Координаты центроида точки можно задать, а вот полилинии-не подходит, так как расстояния уже не будут минимальными, нужно к ближайшей точке полилинии, а не к центру.
Если кто-то знает как это сделать подскажите, пожалуйста. Готовые утилиты, которые это умеют-не предлагать :D
Может можно это как нибудь сделать через прямую геодезическую задачу? Есть координаты точки, расстояние к полилинии, можно узнать азимут(можно ли?) и через приросты координат задать значения Х и У для ближайшей точки полилинии? или неверное направление?

trir
Гуру
Сообщения: 5355
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Построение прямой кратчайшего расстояния от точки к поли

Сообщение trir » 12 авг 2013, 08:29

Кратчайшее расстояние от прямой к точке - это нормаль, зная уравнение прямой можно получить уравнение нормали и точку пересечения. Только полилиния состоит из отрезков и точка пересечения может не лежать на отрезке, в этом случае надо брать ближайшую вершину отрезка

IVTarasenko
Новоприбывший
Сообщения: 13
Зарегистрирован: 14 окт 2010, 23:16
Репутация: 1

Re: Построение прямой кратчайшего расстояния от точки к поли

Сообщение IVTarasenko » 12 авг 2013, 10:24

Спасибо! Как-то это на ум и не пришло. Осталось вспомнить школьную геометрию :D

Sibit
Активный участник
Сообщения: 216
Зарегистрирован: 21 окт 2009, 13:29
Репутация: 28
Откуда: Новосибирск

Re: Построение прямой кратчайшего расстояния от точки к поли

Сообщение Sibit » 12 авг 2013, 12:29

Если получилось вычислить расстояние, то можно попробовать построить окружность с радиусом расстояния из точки, а потом найти точки пересечения с полилинией. Вроде должно проще получиться.

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: Построение прямой кратчайшего расстояния от точки к поли

Сообщение dab » 12 авг 2013, 13:51

IVTarasenko писал(а):Осталось вспомнить школьную геометрию :D
http://algolist.manual.ru/maths/geom/di ... ntline.php :)

IVTarasenko
Новоприбывший
Сообщения: 13
Зарегистрирован: 14 окт 2010, 23:16
Репутация: 1

Re: Построение прямой кратчайшего расстояния от точки к поли

Сообщение IVTarasenko » 12 авг 2013, 15:31

О да, это как раз то, что мы проходили в 9 классе :mrgreen: Спасибо :)

Sibit
Активный участник
Сообщения: 216
Зарегистрирован: 21 окт 2009, 13:29
Репутация: 28
Откуда: Новосибирск

Re: Построение прямой кратчайшего расстояния от точки к поли

Сообщение Sibit » 13 авг 2013, 06:42

Я думаю, что вычислять расстояние получится сильно муторно. Т.е. для каждого сегмента надо будет вычислить расстояние по нормали, потом выяснить, попадает ли нормаль на сегмент. Если нет - выбрать вершину с минимальным расстоянием.
Я предлагаю сделать как на 1-ом рисунке. Т.е. Вычислить расстояние между точкой и полилинией - ObjectDistance(Полилиния,Точка, "m") (далее dist). Построить окружность с радиусом dist.
Но тут первые вилы : ObjectDistance между точкой и полилинией считается с некоторой погрешностью(у меня полученная окружность не доходила на 50 метров). Можно вычислить расстояние между полученной окружностью и полилинией добавить его к dist и еще раз построить окружность. После этого, получить пересечение окружности и полилинии.
Вторые вилы : итог пересечения полилиния из 2-х точек. И тут 2 варианта: между ними есть вершина, или нет. В первом случае - находим середину и вот наша искомая точка. Во втором случае, надо найти эту вершину. Самый простой вариант - перебором найти ближайшую к полученной полилинии. Но здесь необходимо смотреть на достаточную точность.
Ну и трети вилы : из за дискретности координат, возможны странные результаты пересечения. Рис. 2 - пересечение с окружностью, полученное пересечение - маленькая синяя точка(на самом деле это PolyLine с одним сегментом из 2-х точек ). Рис.3 - при тех же начальных, я преобразовал окружность(эллипс) в полилинию. Результат - синяя линия(тоже PolyLine).
Вложения
1.jpg
1.jpg (15.31 КБ) 8612 просмотров
2.jpg
Черная - полилиния, красная - окружность, синяя - пересечение
2.jpg (12.88 КБ) 8612 просмотров
3.jpg
Черная - полилиния, красная - окружность, синяя - пересечение
3.jpg (7.21 КБ) 8612 просмотров

IVTarasenko
Новоприбывший
Сообщения: 13
Зарегистрирован: 14 окт 2010, 23:16
Репутация: 1

Re: Построение прямой кратчайшего расстояния от точки к поли

Сообщение IVTarasenko » 13 авг 2013, 09:00

Спасибо за помощь :) Варианты, конечно, сложные, :( будем пробовать - посмотрим, что получится.

Ответить

Вернуться в «MapInfo»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость