Я пытаюсь вычислить разницу между двумя полигонами, используя boost::geometry::difference
, где boost::geometry::model::polygon
представляет мои полигоны.
В случае, когда первый многоугольник содержит второй, результатом операции будет один boost::geometry::model::polygon
с внутренним и внешним кольцами, заполненными координатами исходных многоугольников.
Как мне получить многоугольник (в смысле элементарной геометрии) из boost::geometry::model::polygon
?
Уточнение:
В элементарной геометрии многоугольник - это плоская фигура, которая ограничена конечной цепочкой прямых отрезков, замыкающихся в петлю, образуя замкнутую цепь или контур.
Внешнее кольцо boost::geometry::model::polygon
- многоугольник, внутренние кольца тоже многоугольники. В целом boost::geometry::model::polygon
не является многоугольником.
Итак, о чем я спрашиваю: как преобразовать boost::geometry::model::polygon
в нормальный многоугольник (имеющий единственную цепочку отрезков прямых линий), который представляет ту же область на плоскости.
Вот чего я пытаюсь достичь:
polygon1 = (0,0), (0,8), (8,8), (8,0), (0,0)
polygon2 = (2,2), (2,6), (6,6), (6,2), (2,2)
Полигоны 1 и 2 зеленого цвета / oker:
difference = (0,0), (0,4), (2,4), (2,2), (6,2), (6,6), (2,6), (2,4), (0,4), (0,8), (8,8), (8,0), (0,0)
Ожидаемая разница в сером:
Я знаю, что тот же boost::geometry::model::polygon
, имеющий внутренние кольца, может быть представлен бесконечным количеством различных нормальных многоугольников. Мне все равно, какой я получу.
polygon1
отображается как квадрат со стороной 10 вместо 8. - person empty'void   schedule 09.05.2016