2010-10-28 3 views
2

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

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

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

Любые советы? Спасибо за ваш вклад!

Sascha

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 : Я узнал, что мой заголовок в моих первых строках не описывает одну и ту же проблему. Мне не нужно знать, какие сегменты взаимодействуют с х, а только количество сегментов, как описано в тексте.

ответ