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

使用boost::polygon调整多边形大小后如何移除间距过近的矢量线?

对应Boost库方案说明

Boost.Polygon库没有直接实现“缩放后自动保证多边形相邻边间距不小于指定阈值”的独立函数,你可以结合该库的公开API组合实现需求,具体说明如下:

  • 首先不建议你直接使用boost::polygon::detail::resize接口,detail命名空间下的内容属于库内部实现,不保证对外兼容性,相同功能建议用公开的boost::polygon::offset_polygon接口,该接口就是用于多边形按指定尺寸缩放(偏移)的正式API,输出结果和你现在用的resize完全一致。
  • 要实现最小间距校验修正,可按以下两步组合调用现有API:
    1. 先用offset_polygon完成基础缩放,得到你现在输出的初步结果多边形
    2. 遍历初步结果的所有边,计算相邻边的最短距离,对所有间距小于预设最小值的边对,使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:27:06