ADN Club > Civil 3D API
Вычислить точку пересечения перпендикуляра и трассы
Павел55:
Допустим есть произвольная точка P на небольшом удалении от трассы, необходимо получить точку пересечения перпендикуляра проведенного из точки P к трассе. Стандартных методов не нашел, есть у кого идеи как это сделать? Трасса большая(автодороги до 10 км), состоит не только из дуг и отрезков, но есть еще и эллиптические дуги(переходные кривые).
Александр Ривилис:
Не проверял, но возможно такое решение сработает:
1. Используя Alignment.GetPolyline получаем полилинию, образующую трассу.
2. Используя метод Curve.GetClosestPointTo находим ближайшую точку на полилинии - это и будет нормаль. Если конечно точка не за пределами начала и конца трассы - в этом случае это будет одна из конечных точек.
Павел55:
Спасибо, буду пробовать! Я уж было чуть не взялся вычислительную геометрию и алгоритмы штудировать.
Дмитрий Загорулькин:
--- Цитата: Александр Ривилис от 30-07-2019, 21:32:52 ---Используя Alignment.GetPolyline получаем полилинию, образующую трассу.
--- Конец цитаты ---
При этой операции создаётся новый объект, так что, не забудьте потом его уничтожить.
--- Цитата: Александр Ривилис от 30-07-2019, 21:32:52 ---Используя метод Curve.GetClosestPointTo находим ближайшую точку на полилинии
--- Конец цитаты ---
Насколько я помню, этот метод можно применять сразу к трассе, не извлекая полилинию.
Если же решать задачу чисто средствами Civil 3D API, то следует использовать методы: Alignment.StationOffset для получения пикетажа ближайшей точки на трассе и Alignment.PointLocation для получения координат этой точки.
Александр Ривилис:
--- Цитата: Дмитрий Загорулькин от 30-07-2019, 23:56:57 ---Насколько я помню, этот метод можно применять сразу к трассе, не извлекая полилинию.
--- Конец цитаты ---
Точно. Я зевнул, что Alignment - наследник Curve:
Навигация
Перейти к полной версии