用于对折线进行充气/放气(偏移,缓冲)的算法

时间:2013-08-27 07:10:55

标签: c++ geometry polygon polyline boost-geometry

相关问题:
An algorithm for inflating/deflating (offsetting, buffering) polygons

不同之处在于我正在寻找一种方法将给定的折线膨胀成多边形:

polyline with a box around

我有以下输入:

  • 形成折线的2D点列表(草图中的亮绿色)
  • 线宽

输出应该是一个多边形,显示线条的宽度扩展方式。

我原本以为我可以使用Boost::Geometry::buffer,不幸的是它现在似乎只支持盒子。使用Boost::GeometryGDAL/OGR的解决方案将得到优先考虑。

更新
我选择使用Clipper库及其OffsetPolyLines函数。一旦Boost Geometry与Polyline-Buffer支持一起发布,我将切换到Boost(因为其他所有东西都在我的软件中使用Boost运行)。

2 个答案:

答案 0 :(得分:2)

Boost.Geometry扩展(来自Trunk)可以做到这一点。它还没有发布。它可以缓冲多边形,多边形,点和多种几何形状。您可以指定尖角(斜角)或圆角。它还不完美,但上面的示例中的行不应该出现任何问题。

发布的版本(1.54)还没有这个,而且下一个版本还没有它。所以现在你必须使用Trunk(来自SVN)

答案 1 :(得分:2)

据我所知,OP更倾向于使用Boost :: Geometry或GDAL / OGR中的解决方案,但是,如果其他人遵循此主题,我的Clipper library也可以进行折线偏移。 (即将发布的version 6已经在SourceForge存储库中进行了简化,现在它也支持开放路径(折线)剪切。)