Обрезка линий с помощью CGAL

Я пытаюсь добиться пересечения между линией и множеством многоугольников с отверстиями -> обрезать линии по маске (набор многоугольников) -> результатом будут другие линии.
Вопрос на CGAL: пересечение отрезка и многоугольника? предлагает использовать полигон с двумя точками для представления линии. С помощью образцов CGAL я придумал следующий фрагмент. Моим намерением было вычислить часть линии, которая лежит внутри прямоугольника, используя пересечение. Тем не менее, результат имеет 4 точки, и, похоже, он вычисляет пересечение между полигоном и полуплоскостью, определенной линией.

Кто-нибудь может пролить свет на это, пожалуйста?

typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
typedef Kernel::Point_2                                   Point_2;
typedef CGAL::Polygon_2<Kernel>                           Polygon_2;
typedef CGAL::Polygon_with_holes_2<Kernel>                Polygon_with_holes_2;
typedef std::list<Polygon_with_holes_2>                   Pwh_list_2;

int main()
{
Polygon_2 P; // rectangle
P.push_back (Point_2 (10, 10));
P.push_back (Point_2 (20, 10));
P.push_back (Point_2 (20, 20));
P.push_back (Point_2 (10, 20));

Polygon_2 Q; // line
Q.push_back (Point_2 (0, 15));
Q.push_back (Point_2 (25, 15));

Pwh_list_2 symmR;
Pwh_list_2::const_iterator it;

CGAL::intersection (Q, P, std::back_inserter(symmR));for (it = symmR.begin(); it != symmR.end(); ++it) {
std::cout << "--> ";
print_polygon_with_holes( *it);
}

getchar();
return 0;
}

4

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …