【发布时间】:2016-05-06 11:17:13
【问题描述】:
我正在尝试使用boost::geometry::difference 计算两个多边形的差异,boost::geometry::model::polygon 代表我的多边形。
如果第一个多边形包含第二个多边形,则操作的结果是单个 boost::geometry::model::polygon,内环和外环填充有源多边形的坐标。
如何从boost::geometry::model::polygon 获取多边形 (in the elementary geometry sense)?
澄清:
在初等几何中,多边形是一个平面图形,其边界是有限的直线段链,这些直线段闭合成一个环,形成一个闭合的链或回路。
boost::geometry::model::polygon 的外环是多边形,内环也是多边形。整体而言,boost::geometry::model::polygon 不是多边形。
所以,我要问的是:如何将boost::geometry::model::polygon 转换为 正常 多边形(具有单条直线段链),它表示平面上的同一区域。
这是我想要实现的目标:
polygon1 = (0,0), (0,8), (8,8), (8,0), (0,0)
polygon2 = (2,2), (2,6), (6,6), (6,2), (2,2)
绿色/oker 的多边形 1 和 2:
difference = (0,0), (0,4), (2,4), (2,2), (6,2), (6,6), (2,6), (2,4), (0,4), (0,8), (8,8), (8,0), (0,0)
预期的灰色差异:
我知道具有内环的相同boost::geometry::model::polygon 可以由无限多个不同的正常多边形表示。我不在乎我得到哪一个。
【问题讨论】:
-
你能澄清你的问题吗?您已经有一个表示多边形的对象,您想要获取的另一种多边形形式是什么,您真正想要实现的是什么?也许你想绘制多边形?
-
回复。您的编辑“我知道具有内环的相同 boost::geometry::model::polygon 可以由无限多个不同的法线多边形表示。我不在乎我得到哪一个。” ——这似乎恰恰与你的真实要求背道而驰:你似乎很在乎。这完全正确,因为具有一个或多个内环的一个外环不能可能以另一种方式表示为“正常多边形¹”。 (¹您的定义:“(具有一条直线段链)”)
-
正如您在我的示例中看到的,为了表示两个多边形的差异,我引入了一条直线段 (0,4)-(2,4) 创建 a weakly simple polygon,显然是其他任何可以改为使用连接内外边界的直线段,从而产生无限多种解决这种差异的方法。而且定义不是我的,它来自Wikipedia。
-
我想我已经理解你的方法了。我不会说您期望的结果在拓扑/数学上是等价的,但我确实看到它们如何被认为是实用等价的。我很快就会发布一个自定义算法。
-
感谢您的插图,虽然看起来
polygon1被渲染为边长为 10 而不是 8 的正方形。
标签: c++ boost boost-geometry