Сообщество программистов Autodesk в СНГ
ADN Club => VBA => Тема начата: Legantmar от 03-08-2022, 09:21:23
-
Коллеги, подскажите алгоритм действий
Есть полилиния составленная из прямых линий и дуг, необходимо построить перпендикулярные линии с равными промежутками расстояния между ними.
(Т.е. есть жд линия с радиусами и нужно показать пикеты через каждый 1 км)
(https://i.postimg.cc/PCG9mL1J/2022-08-03-09-00-22.png) (https://postimg.cc/PCG9mL1J)
если бы полилиния состояла бы только из прямых отрезков, то можно было бы вычислить точку на отрезке по расстоянию от начальной точки и построить линию повернутую на 90 градусов относительно нее, но как быть с дугами ?
буду рад любым предложениям и мыслям
-
нда... если бы вы писали на .нет, все было бы намного проще, а так, Вам придется рассчитывать все руками, получая кривизну дуги, ее длину и самому рассчитывать координаты точки, а дальше все проще, у дуги есть центр, соответственно вы должны стоить отрезки по вектору от центра к точке на дуге.
-
пишу на IronPython (аля С#, а следовательно и .Net)
пока пошел по пути предварительного преобразования сплайна в полилинию в Автокаде с помощью команды _pedit с требуемой детализацией (например, 70)
получаю много тысяч прямых отрезков, нахожу сумму отрезков кратных ~ 1 км, строю новую линию по координатам последнего в каждом цикле, поворачиваю на 90 градусов и масштабирую до приемлемых значений (заданной длины)
-
Legantmar,
Curve.GetFirstDerivative даёт вектор касательной к кривой в точке на кривой. Соответственно добавив PI/2 получишь нормаль к кривой.
-
спасибо.
попробую