Перекрытие сегментов кольца

Как определить, перекрывается ли 2D-сегмент (чистое перекрытие, не примыкает и не касается) 2D-кольцом (выпуклым)?

Мои первые подходы заключались в использовании:

  1. не пересекается Но это не сработало, потому что касание/примыкание не считаются непересекающимися

  2. перекрывается Но это не сработало, потому что касание/примыкание считается перекрытием

Я попробовал несколько других комбинаций (используя внутри), и я не могу найти простой способ. Под простым я подразумеваю: использовать пару алгоритмов повышающей геометрии без реализации алгоритма вычислительной геометрии.

Я считаю, что решение находится где-то в стратегиях...

Я думаю, что могу переопределить проблему: Как мне найти примыкающие кольца (многоугольники)? (примечание: я могу создать вырожденное кольцо из ребра).

Вот фигурка того, что я хочу. Красный сегмент должен возвращать OVERLAP, синий NO OVERLAP.

введите здесь описание изображения

Система: Boost_1.54, CentOS-5, gcc-4.7.2


person Dimitris Dakopoulos    schedule 11.04.2014    source источник
comment
@AdamWulkiewicz: я решил некоторые проблемы, например. что для использования touches() оба кольца должны иметь свои точки с одинаковым порядком, то есть по часовой стрелке или против часовой стрелки, но проблема в том, что я хочу найти, касается ли 2d-сегмент 2d-кольца а touches() не работает для сегмента-кольца. Я пытался создать вырожденное кольцо с краевыми точками: (край.первый, край.секундный, край.первый), но это не всегда работает. overlaps() не подходит, потому что я хочу только прикосновений.   -  person Dimitris Dakopoulos    schedule 14.04.2014


Ответы (1)


Да, в настоящее время (1.55) touches() не реализована для сегмента/кольца. Мы планируем выпустить больше вариантов в 1.56, вероятно, не сегмент/кольцо, но вы сможете использовать линейную/кольцевую линию. Вы можете протестировать его, используя разрабатываемую версию библиотеки:

http://github.com/boostorg/geometry/tree/develop

Также в ветке разработки исправлена ​​проблема с CCW Polygons в touches().

person Adam Wulkiewicz    schedule 14.04.2014