【问题标题】:boost polygon difference returns intersection提升多边形差异返回交点
【发布时间】:2014-06-02 18:04:32
【问题描述】:

我正在尝试使用 boost::geometry::difference 从另一个多边形中减去一个多边形。

首先我创建了 2 个多边形,我们称它们为红色和蓝色。我知道多边形是正确创建的,因为您绘制了它们。

现在,如果我像这样计算这些多边形之间的差异:

    boost::geometry::difference( blue, red,green);

绿色应该是减法的结果。

然后我使用 green.outer() 从绿色中获取点(我知道绿色实际上是一个容器,但鉴于我知道我只会得到一个多边形,因此我想简化我的示例)并绘制他们。

这是我得到的结果:

这不是我想要得到的结果。我怎样才能让 boost 返回蓝色多边形减去红色多边形?像这样:

编辑:我尝试计算这些多边形之间的交集,我得到了我想要的。那很奇怪。不知道是我做错了什么,还是让不懂数学的人提心吊胆。

【问题讨论】:

  • 你为什么不推green_container 而不是greenvector<polygon> 然后你让polygon green = green_container[0];
  • 这就是我说的我做的,但没有写在这里,因为它更容易理解。有趣的是,如果我计算交集,我会得到我想要的
  • 我的意思是蓝色“路径”的不同宽度向我表明它实际上不是多边形的 轮廓(轮廓),而是描述形状的闭合多边形它本身围绕着一个不属于多边形的“倒置空间”。 (另外,rist* 在我之前的评论中应该是first
  • @user3013172 我从不否认它是 /a/ 多边形。我刚才说我们想看到多边形。我投票结束,因为没有足够的信息来重现这个问题。
  • 如上所述,最后一个参数应该是Polygons的向量或MultiPolygon。此外,在没有看到实际数据的情况下,我只能说输入必须是有效的,即多边形的点顺序和闭合必须与多边形类型的特征定义的相同。例如。默认情况下,如果没有明确设置 bg::model::polygon 必须包含顺时针和闭合的多边形数据。如果您不确定顺序,您可以调用 bg::correct() 函数。

标签: c++ boost polygon boost-geometry


【解决方案1】:

我有一个非常相似的问题。我发现我的一些差异操作可以正常工作,而另一些则不能。

在我的情况下,这是由于 cmets 中的 Adam suggested 不正确的顶点缠绕。我使用boost::geometry::correct() 修复了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    相关资源
    最近更新 更多