2014-01-11 4 views
1

Я начинающий в CGAL, и у меня есть вопрос о пересечениях сегментов (может быть, и дугах).Обратные точки пересечения и объекты, пересекающиеся

Учитывая, что у меня есть два списка сегментов, где каждый список представляет собой фигуру, если я помещаю эти две формы в пересечение, есть ли способ получить точки пересечения и ваши сегменты?

Ниже приведен пример: http://imagizer.imageshack.us/v2/800x600q90/13/ydtj.png Я хочу, чтобы сегменты темно-зеленого/синего и точки пересечения были светло-зелеными/синими. На изображении показаны два пересечения, но для моих целей этого было достаточно только первое пересечение.

Я думал перебирать списки, но я думаю, что это может быть наивный подход. Есть более точный и быстрый способ сделать это?

+1

http://doc.cgal.org/latest/Sweep_line_2/index.html –

+0

Интересно представить, что кривая может представлять собой сегмент линии. Но я хочу, чтобы два сегмента (кривые) пересекались, а не дизъюнктные подкринеты. На этом изображении у меня есть результат compute_subcurve http://imagizer.imageshack.us/v2/800x600q90/163/6nxn.png И я хочу, чтобы полные кривые AB, CD или EF, GH. Как я могу это решить? Договоренности? И спасибо за помощь. –

+0

Я провел некоторое исследование и сделал пример, используя аранжировки. http://pastebin.com/SmueNLQe http://pastebin.com/Dx7K7ps5 http://pastebin.com/zU6fG0AV А вот графическое представление http://imagizer.imageshack.us/v2/ 800x600q90/843/fkj5.png Я видел в документации CGAL merge_edge может использовать для объединения двух ребер. И я понял, что если я использую точки пересечения и повторяю между соседними ребрами, вы можете создавать ребра. Но что, если сегмент устройства пересекается более одного раза в другом расположении сегментов? как я могу присоединиться ко всем этим суб-кривым? –

ответ

1

Как-то получить оригинальный примитив. Я просто использовал Arrangement_with_history_2. Можно также использовать Arr_curve_data_traits_2 для хранения исходной кривой, но это не так просто, как использование истории.

В конце концов, я обнаружил, как получить исходные сегменты, но моя проблема еще далека от решения.

Спасибо за помощь.

Смежные вопросы