Пересечения круга и многоугольника

Задача вычислительной геометрии:
Точка P0 выбирается случайным образом на ребре (например, EB ) многоугольника (например, BCDE ]), чтобы найти возможные точки (т. е. P1, P2, P3, ... ) на других ребрах на основе заданного расстояния (т. е. r ). Следующая демонстрация показывает решение путем нахождения пересечений между кругом с центром в точке P0 и краями многоугольника. Таким образом, проблема в основном может быть решена с помощью анализа пересечения Круг - Линия-сегмент .

Интересно , есть ли более эффективный метод для этой очень простой задачи с точки зрения затрат на вычисления? Процесс будет оценен несколько миллионов раз , поэтому любые улучшения представляют интерес.

  • окончательное решение будет извлекать выгоду из мощности Python ,
  • при необходимости основные вычисления будут выполняться в Fortran .

enter image description here

Обновления:
Спасибо за ваши комментарии. Пожалуйста, примите во внимание мои комментарии к комментариям, которые помогают подробнее прояснить вопрос. Не желаю здесь их повторять, воодушевляю рассматривать все комментарии и ответы;).

Я только что реализовал метод Круг - пересечение отрезка линии , основанный на алгоритме, найденном [здесь] . Собственно я адаптировал его для работы с отрезками. Бенчмарк алгоритма, реализованного на Python, выглядит следующим образом:
enter image description here
enter image description here
Количество отрезков линии: 100000 и система обычная настольная. Прошедшее время: 15 секунд . Надеюсь, они помогут дать некоторое представление о стоимости вычислений. Внедрение ядра в Fortan может значительно улучшить производительность.
Однако перевод - это последний шаг.

12
задан Developer 23 January 2012 в 10:10
поделиться