Тема: Создание пикетажной ведомости
Есть полиния трассы.
Есть набор точек лежащих вдоль (и не совсем вдоль трассы)
Есть начальный пикет.
Требуется определить пикетаж каждой точки и ее расстояние от трассы.
Наброски моего видения на "псевдоязыке":
i=0
начало:
rast=0
Берем вершину полилинии с номером i
Ставим пск в эту точку, x направляем к вершине i+1, y "вверх" (всегда в одну сторону от полилинии)
Все точки, x которых меньше длины отрезка полилинии i - i+1 записываем в ведомость. Пикетаж у них равен rast+x, расстояние от трассы = y.
rast=rast+длина отрезка полилинии i - i+1
goto начало
Проблемы:
1) точка может определяться не один раз, если трасса изгибается и перпендикуляр неоднозначен, то есть может опускаться на разные части трассы
для решения наверное надо вводить коридор отбора (то есть если y трассы больше чем заданная величина коридора, то точку не определяем).
И(/или?) надо выбирать минимальное расстояние до трассы из всех возможных перпендикуляров.
2) точка может не иметь перпендикуляра на трассе. Такое происходит, если точка лежит в стороне от вершины угла на тупой его части. Перпендикуляр здесь попадает только на продолжение отрезков полилинии. В этом случае требуется присваивать такой точке пикетаж вершины угла. НО! перпендикуляр к этой точке может и существовать, но быть (не)значительно длиннее, чем расстояние до вершины угла.
Наверное просто надо еще и определять для каждой точки расстояние до ближайшей вершины дополнительно к длинне перпендикуляра и выбирать минимальное? И не представляю, как обнаруживать такие (не имеющие перпендикуляра) точки
Может кто чего поможет?
В принципе, можно и на vba, но lisp нравится больше.
Ведомость не важно в каком виде, это не проблема.
Заранее благодарю!