使用boost::polygon调整多边形大小后如何移除间距过近的矢量线?
对应Boost库方案说明
Boost.Polygon库没有直接实现“缩放后自动保证多边形相邻边间距不小于指定阈值”的独立函数,你可以结合该库的公开API组合实现需求,具体说明如下:
- 首先不建议你直接使用
boost::polygon::detail::resize接口,detail命名空间下的内容属于库内部实现,不保证对外兼容性,相同功能建议用公开的boost::polygon::offset_polygon接口,该接口就是用于多边形按指定尺寸缩放(偏移)的正式API,输出结果和你现在用的resize完全一致。 - 要实现最小间距校验修正,可按以下两步组合调用现有API:
- 先用
offset_polygon完成基础缩放,得到你现在输出的初步结果多边形 - 遍历初步结果的所有边,计算相邻边的最短距离,对所有间距小于预设最小值的边对,使用
boost::polygon::polygon_set的裁剪能力,将过窄的区域做削平处理,即可实现你描述的“用蓝色线替换原有红色边”的效果。
- 先用
基础使用示例
#include <boost/polygon/polygon.hpp> namespace gtl = boost::polygon; // 定义多边形类型,曼哈顿结构用polygon_90_with_holes_data,任意角度用polygon_data using Polygon = gtl::polygon_90_with_holes_data<int>; using Point = gtl::point_data<int>; int main() { Polygon input_poly, resized_poly; // 此处省略input_poly的顶点填充逻辑 // 基础缩放操作:offset_value正值为放大,负值为缩小 int offset_value = 10; gtl::offset_polygon(resized_poly, input_poly, offset_value, gtl::width(1)); // 后续添加间距校验+polygon_set裁剪逻辑即可 return 0; }
内容的提问来源于stack exchange,提问作者Elmi
相关产品推荐
相关产品推荐

