C :获取带有孔的多边形的简单多边形列表
C++: Get list of simple polygons from polygon with holes
我在boost :: polygon上挣扎 - 显然它可以做除了我想要的事情。我有一些边界描述一组多边形及其孔(在2D空间中)。通常,我们甚至可以在一个孔中有孔(较大的多边形孔中的较小多边形),或一个多边形中的许多孔。如果有必要,我可以检查哪个边界描述一个孔并描述多边形。有时边界是分开的(不彼此包含),这意味着我们有很多多边形。我想要的是一种给我一组简单的方法,不包含任何孔多边形,它们一起形成输入" holey"多边形。
这是可以使用Boost Polygon的。您需要polygon_set_data::get()
,如果您从支持孔的多边形概念转换为没有一个的多边形概念。请参阅:http://www.boost.org/doc/libs/1_65_0/libs/polygon/doc/gtl_polygon_set_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;
}
相关文章:
- 计算缩放多边形的比例,得到给定的多边形面积
- 将QGraphicsItem的移动区域限制在多边形区域内
- 重新排列单线以形成闭合多边形?
- 提升几何体:C++并集多个多边形
- 在 QT C++中绘制/操作多边形
- Maya API C++:从多边形获取材质
- 添加带有提升的多边形::p奥利贡不编译?
- 使用 C++在 OpenGL 中对 3D 多边形进行纹理处理
- 使用 C++在 OpenGL 中移动自动旋转的 3D 多边形
- 如何使用增强::几何计算多边形的旋转固体体积?
- 从拉伸多边形构建多面体
- 使用提升几何缓冲区缩放多边形时的冗余折点
- cgal多边形网格中的tet网格密度分级
- 如何绘制具有随机顶点数量的多边形并旋转它们
- 多边形裁剪 - 一点点详细说明
- 开放式颜色多边形表面的最简单方法
- C :获取带有孔的多边形的简单多边形列表
- 如何对简单多边形进行delaunay三角剖分并找到它'cgal中任何三角形的s邻居
- 使用单调多边形的多边形三角剖分
- 使用CGAL划分非简单多边形