我试图创建一个等高线多边形(“甜甜圈”)从一组轮廓。这是一个过程:
由此产生的多边形和洞构成等面积的“甜甜圈”。这些等高线区域可以作为等高线地图呈现,也可以用于其他目的.注意,如果我想要做的只是渲染轮廓,我可以在初始排序之后停止,然后按照顺序呈现等高线,这样就可以在顶部进行最内部的渲染。我确实需要实际的区域。
首先- Clipperlib是一个非常棒的图书馆,我将非常乐意支付好的钱-谢谢安格斯!
我的问题是,在某些情况下,我似乎从差异操作中得到了一些奇怪的结果--我怀疑这可能是我的用户错误,所以我将说明这个问题:

这张照片显示了两个多边形--主题是红色的,孩子们都是蓝色的。我想把孩子们从这门课上减去。注意鼠标指针附近的小区域.我所期望的是两个外部多边形--鼠标指针附近的小多边形和大的多边形。我还希望所有的“岛屿”都是第二个大多边形的洞。
实际上,我得到的是两个与之相关的子(洞)(如预期的那样):


在第二张图片中,鼠标指针附近的小多边形是“外部”,所有其他填充的多边形都是属于它的“洞”。请注意,我在两张图片中都显示了这两种解决方案的轮廓--只关注填充的多边形。
我正在执行clipperlib,使用第一个图像中的红色多边形作为主题,所有的孩子都作为剪辑。剪辑类型是ctDifference (我也尝试过Xor,结果也是一样的--考虑到所有的孩子都在被试的范围内,这是应该的)。我请求PolyTree回来,它有两个孩子。我正在使用c#库,并且也尝试过v6。
在某种程度上,我所需要的结果都在那里--所有的“洞”都是这样指定的,问题是,这些洞中有许多是在图像右上角的微小的外部区域的孩子返回的。我是不正确地阅读PolyTree,不正确地使用ClipperLib,还是这个结果是完全错误的?
另外,我注意到新的ClipperLib (v6)现在接受Z值。我现在在想,是否有一种比我所用的方法更好的方法从给定的无序等高线集合中生成这些等值线?
谢谢,马特
编辑:我已经上传了一个文本文件中的多边形的原始数据。
这是链接
该文件将主题多边形作为第一组顶点,然后是每个子节点。每个多边形都表示为单行上的X/Y对,每个多边形之间有一条换行符。
发布于 2013-11-05 19:51:38
在第二张图片中,鼠标指针附近的小多边形是“外部”,所有其他填充的多边形都是属于它的“洞”。请注意,我在两张图片中都显示了这两种解决方案的轮廓--只关注填充的多边形。
这听起来像是某个地方有错误,但是如果没有原始数据很难判断。
而且,这里不是支持快船的最好地方,在讨论论坛和报告可疑的臭虫在SourceForge都有一个地方。无论如何,最好现在在这里发布您的原始数据(请尽量少,同时仍然复制问题)。
编辑:
好吧,我看过数据我不明白你为什么相信.所有其他填充多边形都是属于它的“洞”。
PolyTree solutiontree = new PolyTree();
cpr.Execute(ClipType.ctDifference, solutiontree,
PolyFillType.pftNonZero, PolyFillType.pftNonZero);
solution = new Polygons(solutiontree.ChildCount);
foreach (PolyNode pn in solutiontree.Childs)
solution.Add(pn.Contour);只需使用上面的代码片段过滤解决方案PolyNodes的顶级PolyTree (并且顶级节点必须是“outers”),这就是我得到的(解决方案是绿色的).

从这个结果来看,“鼠标指针附近的小多边形”不可能拥有其他多边形。话虽如此,但很明显,解决方案中仍然存在漏洞,因此在某个地方有一个bug需要修复。
编辑2:,我已经找到并修复了这个错误,并将剪贴器版本6.0.2上传到SourceForge存储库。在正式更新主Zip包之前,我需要做更多的错误检查。
编辑3:显然还是不对。
编辑4:我想我终于解决了这个错误(参见SourceForge存储库中的修订版420 )。跟进那里。
https://stackoverflow.com/questions/19797016
复制相似问题