You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将boost::polygon中的polygon_set_data转换为polygon_data?

解决boost::polygon中PolygonSet转单个Polygon的问题

我完全懂你的困扰——你用boost::polygon库计算了两个轴对齐矩形的并集,结果存在PolygonSet里,但不知道怎么把它转成单个Polygon类型对吧?其实这个库已经提供了现成的方法来处理这个转换,下面直接给你解决方案:

核心思路

PolygonSet的设计是用来存储多个不相交的多边形集合的,但你的场景里并集是单个多边形,所以我们可以把PolygonSet中的多边形数据提取到一个容器中,再取出第一个元素即可。

修改后的完整代码

在你现有的代码基础上,添加以下代码:

#include <vector>  // 需要包含这个头文件来使用std::vector

// ... 你的原有代码 ...

// 将PolygonSet中的多边形复制到vector容器中
std::vector<Polygon> result_polygons;
gtl::copy_data(polyset, std::back_inserter(result_polygons));

// 由于你的并集是单个多边形,直接取第一个元素
Polygon union_polygon = result_polygons.front();

// 可选:验证结果多边形的点数量(应该是8个)
std::vector<Point> union_points;
gtl::get_points(union_points, union_polygon);
// 输出点数量,确认是否符合预期
// std::cout << "Union polygon point count: " << union_points.size() << std::endl;

关键说明

  • gtl::copy_data是boost::polygon库专门用来从PolygonSet中提取多边形数据的函数,它会把集合中的所有多边形(这里只有一个)复制到你提供的容器中。
  • 因为你确定并集结果是单个多边形,所以直接用result_polygons.front()获取即可;如果是多个多边形的场景,就需要遍历这个vector来处理每个多边形。
  • 要注意确保PolygonSet中的多边形确实是单个,否则取front()会在空容器时出错,你可以先判断result_polygons.empty()来做安全检查。

内容的提问来源于stack exchange,提问作者kyleqian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:26:53