【问题标题】:An algorithm for inflating/deflating (offsetting, buffering) polylines膨胀/放气(偏移、缓冲)折线的算法
【发布时间】:2013-08-29 19:54:33
【问题描述】:

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

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

我有以下输入:

  • 形成折线的二维点列表(草图中的亮绿色)
  • 线条宽度

输出应该是一个多边形,显示线条看起来如何被宽度扩展。

我原本以为我可以为此使用Boost::Geometry::buffer,不幸的是它现在似乎只支持盒子。最好使用Boost::GeometryGDAL/OGR 的解决方案。

更新:
我选择使用 Clipper 库及其OffsetPolyLines 函数。一旦 Boost Geometry 发布并支持折线缓冲区,我将切换到 Boost(因为其他一切都在我的软件中使用 Boost 运行)。

【问题讨论】:

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


【解决方案1】:

我了解 OP 更喜欢 Boost::Geometry 或 GDAL/OGR 中的解决方案,但如果其他人关注此线程,我的 Clipper library 也可以进行折线偏移。 (SourceForge 存储库中即将发布的version 6 简化了这一点,它现在也支持开放路径(折线)裁剪。)

【讨论】:

  • 这是我将使用的解决方案,直到 Boost 发布其增强的 Buffer 算法。附带说明:由于缺少 declspec(dllexport),Clipper 似乎与 Windows 不兼容。我添加了这些,一切都在 Windows 7 上使用 VC90 和 VC100 运行良好。
  • 我承认我有点像 C++ 新手,但如果您将源代码直接编译到应用程序中,则不需要 declspec(dllexport) 的 ISTM。您是否真的建议我应该将其包含在所有标题函数中?此外,如果您刚开始使用 Clipper,我强烈建议您使用版本 6(来自 SF 存储库),因为它是一个重大更新,特别关注支持开放路径(折线)。
  • 是的,我使用 SF 的最新版本,并且 OffsetPolyLines 工作正常。如果要在 Windows 上创建动态库 (DLL),则需要使用 dllexport。静态库不需要它。下周我会给你发一个补丁。
  • OffsetPolyLines 在版本 6 中已被替换为 OffsetPaths。
【解决方案2】:

Boost.Geometry 扩展(来自 Trunk)可以做到这一点。它尚未发布。它可以缓冲多边形、多边形、点和多几何图形。您可以指定尖角(斜接)或圆角。它还不完美,但您上面的示例中的线条应该不会有任何问题。

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

【讨论】:

  • 它是从锐角形成燕尾还是可靠地将它们剪掉?
  • @Barend Gehrels 你知道这是否已经发布了吗?
猜你喜欢
  • 2010-11-09
  • 2010-11-09
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 2021-03-01
相关资源
最近更新 更多