Вычислительная геометрия проблема:
Точка P0
выбирается случайным образом на кромке (например, EB
) многоугольника (например, BCDE
), чтобы найти возможные точки (т.е. P1,P2,P3,...
) на другом края на основе заданного расстояния (т. е. r
). Следующая демонстрация показывает решение путем нахождения пересечений между окружностью с центром в точке P0
и краями многоугольника. Таким образом, проблема в основном может быть решена путем анализа пересечения Circle--Line-Segment
.Круг-Многоугольник Пересечения
Интересно, Есть ли более эффективный метод для этой очень простой проблемы с точки зрения стоимости вычислений? Процесс будет оценен несколько million times
, поэтому любой интерес представляет интерес.
- окончательное решение будет извлечь выгоду из Python мощности;
- расчет ядра будет в Fortran при необходимости.
Обновления:
спасибо за ваши комментарии. Пожалуйста, рассмотрите мои комментарии к комментариям, которые помогают уточнить этот вопрос. Не желая повторять их здесь, поощряя рассмотрение всех комментариев и ответов;).
Я только что реализовал метод Circle--Line-Segment Intersection
на основе найденного алгоритма [here]. Фактически я адаптировал его для работы с линейными сегментами. Эталон алгоритма, реализованный в Python выглядит следующим образом:
количества сегментов линии: 100,000
и система обычно рабочий стол. Истекшее время: 15 seconds
. Надеемся, что это полезно, чтобы дать некоторое представление о стоимости вычислений. Реализация ядра в Fortan может значительно улучшить производительность.
Однако перевод является последним шагом.
Является ли расстояние «r» от всех миллионов запросов одинаковым? Можно ли считать многоугольник выпуклым? –
@BorisStrandjev Для нашей задачи все многоугольники выпуклые. «r» может меняться для каждой итерации, поэтому она может быть различной, но для каждого полигона индивидуальна. – Developer
И миллионы запросов выполняются в одном полигоне или в разных? –