Я борюсь с Boost :: Polygon - видимо, он может делать все, кроме того, что я хочу. У меня есть несколько границ, описывающих множество полигонов и их дырок (в 2d-пространстве). В общем, мы можем даже иметь отверстие в отверстии (меньший многоугольник в отверстии большего полигона) или много отверстий в одном полигоне. Если это необходимо, я могу проверить, какая граница описывает отверстие и описывает многоугольник. Иногда границы разделены (и не содержат друг друга), что означает, что у нас много полигонов. То, что я хочу, - это метод, который дает мне набор простых, не содержащих никаких многоугольников дыр, которые вместе образуют входной «дырявый» многоугольник.C++: Получить список простых полигонов из многоугольника с отверстиями
ответ
Это возможно с помощью Boost Polygon. Вам понадобится polygon_set_data::get()
, который сделает перелом отверстия для вас на случай, если вы перейдете из концепции многоугольника, поддерживающей отверстия, к той, которая этого не делает. См.: http://www.boost.org/doc/libs/1_65_0/libs/polygon/doc/gtl_polygon_set_concept.htm для более подробной информации.
Ниже приведен пример, где мы представляем многоугольник с отверстием, а затем преобразовать его в простой многоугольник только с одним кольцом:
#include <boost/polygon/polygon.hpp>
namespace bp = boost::polygon;
int main(void)
{
using SimplePolygon = bp::polygon_data<int>;
using ComplexPolygon = bp::polygon_with_holes_data<int>;
using Point = bp::point_data<int>;
using PolygonSet = bp::polygon_set_data<int>;
using SimplePolygons = std::vector<bp::polygon_data<int>>;
using namespace boost::polygon::operators;
std::vector<Point> points{{5, 0}, {10, 5}, {5, 10}, {0, 5}};
ComplexPolygon p;
bp::set_points(p, points.begin(), points.end());
{
std::vector<Point> innerPoints{{4, 4}, {6, 4}, {6, 6}, {4, 6}};
std::vector<SimplePolygon> inner(1, SimplePolygon{});
bp::set_points(inner.front(), innerPoints.begin(), innerPoints.end());
bp::set_holes(p, inner.begin(), inner.end());
}
PolygonSet complexPolygons;
complexPolygons += p;
SimplePolygons simplePolygons;
complexPolygons.get<SimplePolygons>(simplePolygons);
std::cout << "Fractured:\n";
for (const auto& polygon : simplePolygons)
{
for (const Point& p : polygon)
{
std::cout << '\t' << std::to_string(p.x()) << ", " << std::to_string(p.y())
<< '\n';
}
}
return 0;
}
Спасибо! Этот вопрос так долго висел, что я даю вам знак признака, несмотря ни на что. – Ch3shire
Знаете ли вы, как идти в другую сторону, то есть от polygon_set до polygon_with_holes? –
Я не уверен, поддерживает ли Boost Polygon это изначально, но это не должно быть слишком сложным для реализации этого, путем поиска краев «разрыва» и их удаления. –
- 1. Учитывая список полигонов, постройте многоугольник с отверстиями
- 2. построение полигонов «пончиков» с отверстиями
- 3. Заполнение многоугольника с несколькими отверстиями с pyCairo
- 4. Заполнение прямолинейного многоугольника (с отверстиями) с прямоугольниками
- 5. Как разбить многоугольник на множество простых полигонов
- 6. Триангуляция многоугольника с использованием монотонных полигонов
- 7. Поиск полигонов внутри многоугольника с elasticsearch
- 8. Библиотека/Структура данных для хранения выпуклого многоугольника с отверстиями
- 9. Проверка на равенство двух полигонов с отверстиями в CGAL
- 10. Мне нужен способ построения 2D-многоугольника с отверстиями
- 11. найти контур смежных полигонов
- 12. Алгоритм заполнения многоугольника
- 13. скрытие полигонов или установка zOrder из многоугольника в box2d
- 14. triangulation earcut.js с отверстиями
- 15. FillPolygon с отверстиями
- 16. Использование FillPath создать полигон с отверстиями
- 17. Земельные полигоны ggplot с отверстиями с geom_polygon
- 18. Google Maps iOS SDK Многоугольники с отверстиями
- 19. Получить список вершин тела формы многоугольника
- 20. Как получить вершины из многоугольника
- 21. Разложение многоугольника - удаление вогнутых точек для формирования выпуклых полигонов
- 22. Создайте список пространственных данных пространственного многоугольника из списка dataframe
- 23. Создание простых чисел Список в объективе C?
- 24. Point-in-poly для QPainterPath с отверстиями
- 25. MKPolygon с отверстиями
- 26. на изображениях с отверстиями
- 27. Создание нового MKPolygon из двух пересекающихся полигонов
- 28. Получить список простых чисел для N
- 29. Как представить многоугольник с отверстием (отверстиями)?
- 30. Удаление подмножества полигонов из массива полигонов
Это не ясно, что именно вы хотите. Если у ваших полигонов есть отверстия, они не являются простыми многоугольниками. Предположим, у вас есть этот многоугольник с отверстием ▣, какой выход вы хотите? –
Мой желаемый результат состоит в том, чтобы получить два многоугольника, которые вместе образуют один входной многоугольник с отверстием. – Ch3shire
О, поэтому вы хотите вырезать форму ввода в простые полигоны. –