【发布时间】:2013-11-16 19:13:09
【问题描述】:
我正在尝试从一组轮廓创建等面积多边形(“甜甜圈”)。这是过程:
- 生成轮廓。
- 将等高线排序为树形结构,这样特定等高线内的所有等高线都是该等高线的子代。
- 对于每个轮廓,使用 Clipperlib 对其所有子项执行差异运算。
生成的多边形和孔构成等面积“甜甜圈”。然后可以将这些等值区域渲染为等高线图,或用于其他目的。请注意,如果我只想渲染轮廓,我可以在初始排序后停止并按顺序渲染轮廓,这样最里面的渲染就在顶部。我确实需要实际区域。
首先 - Clipperlib 是一个很棒的库,我很乐意花大价钱购买它 - 感谢 Angus!
我的问题是在某些情况下我似乎从差异操作中得到了一些奇怪的结果 - 我怀疑这可能是我的用户错误,所以我将说明问题:
这张图片显示了两个多边形 - 主体用红色勾勒,孩子们用蓝色填充。我想从主题中减去孩子。注意鼠标指针附近的小区域。我对这个差异的期望是两个外部多边形 - 靠近鼠标指针的小多边形和大多边形。我还希望所有“岛屿”都是第二个大多边形内的洞。
我实际上得到的是两个外部(如预期的那样),每个外部都有子(孔):
在第二张图片中,鼠标指针附近的小多边形是“外部”,所有其他填充的多边形都是属于它的“孔”。请注意,我在两张图片中都显示了两种解决方案的轮廓 - 只需关注填充的多边形。
我正在执行clipperlib,使用第一张图像中的红色多边形作为主题,所有子元素作为剪辑。剪辑类型是 ctDifference (我也尝试过 Xor 得到相同的结果 - 他们应该是这样,因为所有孩子都在主题内)。 我要一个 PolyTree 回来,它有两个孩子。我正在使用 c# 库,也尝试过 v6。
在一个层面上,我需要的结果都在那里 - 所有的“洞”都被指定为这样,问题是这些洞中有许多是作为右上角的微小外部区域的子级返回的图片。我是在错误地读取 PolyTree,错误地使用 ClipperLib,还是这个结果完全错误?
进一步说明 - 我注意到新的 ClipperLib (v6) 现在接受 Z 值。我现在想知道是否有比我用来从给定的无序轮廓线集合生成这些等值区域更好的方法?
谢谢, 马特
编辑:我已将多边形的原始数据上传到文本文件中。
文件将主题多边形作为第一组顶点,然后是每个子顶点。每个多边形在一行中表示为 X/Y 对,每个多边形之间有一个换行符。
【问题讨论】:
-
你输入的轮廓是什么?是不是像网格一样的东西?
-
输入轮廓是一系列描述闭合路径的坐标。它们在地理坐标中指定 - WGS84 度。它们按 10e7 缩放,以便它们可以作为整数提供给 ClipperLib。
-
啊啊,我明白了。有趣的是,现在这一切都变得有意义了。很高兴了解 Clipperlib,总有一天它可能会派上用场......
标签: c# polygon clipperlib