CGAL Вопрос новичка: Какие сегменты пересекаются?

У меня есть набор сегментов (каждый определен двумя точками; 2D), и я хочу знать для каждого сегмента x, сколько других сегментов y1, ..., yn пересекают x. Как бы вы сделали это эффективно в CGAL?

У меня вообще нет опыта работы с библиотекой CGAL и компьютерной геометрией. Мне просто нужен алгоритм для выполнения упомянутых выше вещей. Поэтому я подумал, что вместо реализации настраиваемой функции было бы лучше / эффективнее использовать эту библиотеку.

Пример CGAL sweep_line.cpp показывает мне, как получить все точки пересечения набора сегментов. Поскольку меня не интересуют точки, мне пришлось бы проверять точки и сегменты, чтобы получить количество пересечений для каждого сегмента. Но я не знаю, как это сделать в CGAL. И я также предполагаю, что есть более эффективный способ сделать это; смысл: избегать вычисления точек и повторения по всем сегментам с новой проверкой, пересекает ли он любую найденную точку.

Какие-нибудь советы? Спасибо за ваш вклад!

саша

PS: еще один быстрый вопрос для новичков: почему результаты следующих печатаются с отрицательными знаками?

Segment_2 segments[] = {Segment_2  (Point_2 (1, 5), Point_2 (8, 5)),
                              Segment_2 (Point_2 (1, 1), Point_2 (8, 8)),
                              Segment_2 (Point_2 (3, 1), Point_2 (3, 8)),
                              Segment_2 (Point_2 (8, 5), Point_2 (8, 8))};

      std::vector<Point_2>     pts;

      CGAL::compute_intersection_points (segments, segments + 4,
                                         std::back_inserter (pts));

Найдено 3 точки пересечения: -21 / -7-21 / -7-3 / -1-5 / -1 -35 / -7-35 / -7

PS2: Я понял, что мой заголовок и мои первые строки не описывают ту же проблему. Мне не нужно знать, какие сегменты соответствуют x, а только количество сегментов, как описано в тексте.


person sascha    schedule 28.10.2010    source источник


Ответы (1)


Вы можете применить функцию do_intersect к двум сегментам.

Дополнительную информацию можно найти здесь: http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Kernel_23_ref/Function_do_intersect.html

person kirilsolo    schedule 27.07.2011