ADN Club > Civil 3D API

Вычислить точку пересечения перпендикуляра и трассы

(1/3) > >>

Павел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:


Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии