У меня есть набор сегментов (каждый из которых определен двумя точками; 2D) и я хочу знать для каждого сегмента x, сколько других сегментов y1, ..., yn пересекаются с x.
Как бы вы сделали это эффективно в CGAL?
У меня вообще нет опыта работы с библиотекой CGAL и компьютерной геометрией. Мне просто нужен алгоритм для выполнения вещей, упомянутых выше. Поэтому я подумал, что вместо реализации настраиваемой функции было бы лучше / эффективнее использовать эту библиотеку.
Пример CGAL sweep_line.cpp показывает, как получить все точки пересечения множества o сегментов. Поскольку меня не интересуют точки, мне нужно будет проверить точки и сегменты, чтобы получить количество пересечений для каждого сегмента. Но я не знаю, как это сделать в 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: Я понял, что в моем заголовке и моих первых строках не описана та же проблема. Мне не нужно знать, какие сегменты пересекаются с x, а только количество сегментов, как описано в тексте.