提升几何体:C++并集多个多边形
Boost Geometry: Union multiple polygons C++
我有一个包含多个 Boost.Geometry 多边形的数组,我需要将它们组合成一个多边形。我已经成功地实现了将每个连续多边形与前两个多边形的并集合并的东西(只是循环它们并联合另一个多边形(。
multi_polygon polygons; // an array of initial polygons
multi_polygon border; // the unioned polygons
for (polygon p : polygons) {
// add another polygon each iteration
multi_polygon tmp_poly;
union_(border, p, tmp_poly);
border = tmp_poly;
}
但是,这需要相当长的时间才能执行。我在视频中听到提到assign
功能可以用于此目的,但没有详细说明如何操作,我找不到有关此的任何其他内容。如何加快此过程?
不,分配只会盲目地将多边形添加到多多边形中,而不会合并它们。
目前在 Boost.Geometry (1.73( 中,没有将多个多边形合并为有效多多边形的算法。
但是,您可以加快算法的速度。仅合并相交的多边形才有意义。其他所有不相交的内容都可以简单地添加到生成的多多边形中。因此,您可以:
- 计算所有多边形的边界框 (
boost::geometry::envelope()
( - 将它们(边界框+多边形的id(放在R树中(
boost::geometry::index::rtree<>
( - 仅合并边界框相交的边界框(
bgi::rtree<>::query()
(,保留当前合并的部分(带bg::union_()
(,跟踪与其合并的多边形的ID(例如,将一些bool
标志与多边形一起存储在容器中(并迭代扩展当前部分的边界框(bg::expand()
- 将所有非相交(不可合并(部分放在单个多多边形中
这不如提议的答案有效,但我从这样做中获得了一些显着的加速,而无需从头开始创建新算法。
multi_polygon polygons; // an array of initial polygons
multi_polygon border; // the unioned polygons
multi_polygon tmp_poly; // a temporary variable
for (const polygon &p : polygons) {
// add another polygon each iteration
union_(border, p, tmp_poly);
border = tmp_poly;
boost::geometry::clear(tmp_poly);
}
相关文章:
- 计算缩放多边形的比例,得到给定的多边形面积
- 将QGraphicsItem的移动区域限制在多边形区域内
- 重新排列单线以形成闭合多边形?
- 提升几何体:C++并集多个多边形
- 在 QT C++中绘制/操作多边形
- Maya API C++:从多边形获取材质
- 添加带有提升的多边形::p奥利贡不编译?
- 使用 C++在 OpenGL 中对 3D 多边形进行纹理处理
- 使用 C++在 OpenGL 中移动自动旋转的 3D 多边形
- 如何使用增强::几何计算多边形的旋转固体体积?
- 从拉伸多边形构建多面体
- 使用提升几何缓冲区缩放多边形时的冗余折点
- cgal多边形网格中的tet网格密度分级
- 如何绘制具有随机顶点数量的多边形并旋转它们
- 多边形裁剪 - 一点点详细说明
- 使用裁剪器库在线和多边形之间相交
- 平移 CGAL 多边形,而无需循环穿过折点
- 无法正确改变窗口中多边形的形状
- 在多边形内查找增强 rtree 元素
- 将当前多边形数据单元与下一个多边形单元格 - VTK 进行比较