我想写一段代码给出一个多边形列表(定义为IntPoints列表的列表)检查是否有任何触摸,如果是这样,将它们合并成一个多边形。为了做到这一点,我已经尝试以下两种方法:合并触摸多边形给出错误结果
List<List<IntPoint>> output=new List<List<IntPoint>>();
output = Clipper.SimplifyPolygons(input,PolyFillType.pftPositive);
和
Clipper c = new Clipper();
c.AddPaths(input, PolyType.ptClip, true);
c.Execute(ClipType.ctUnion, output);
现在这两个在一起很容易合并的多边形但是他们有点overzelous任何多边形开放空间被忽略并且开放区域被简单地组合成单个多边形,意思是这样的:
发生。现在这显然是错误的,因为这两个多边形彼此不接触。两种方法都会出现相同的结果。结果将与输入相同。任何想法如何解决这个问题?溶剂不需要使用削波器库(我没有与它结合),但我确实需要一些使用由点列表定义的多边形的东西输入是一个List>,其中一个Intpoint只是一个包含x和y。
编辑我注意到,当有其他的多边形的内部没有任何多边形也会发生此问题,因此该解决方案始终是“装” 编辑编辑:这里也是什么样的输入可能会像
input[0][0]
{ClipperLib.IntPoint}
X: -724
Y: -472
input[0][1]
{ClipperLib.IntPoint}
X: 428
Y: -472
input[0][2]
{ClipperLib.IntPoint}
X: 428
Y: -472
input[0][3]
{ClipperLib.IntPoint}
X: 428
Y: 632
input[0][4]
{ClipperLib.IntPoint}
X: 428
Y: 632
input[0][5]
{ClipperLib.IntPoint}
X: -724
Y: 632
input[0][6]
{ClipperLib.IntPoint}
X: -724
Y: 632
input[0][7]
{ClipperLib.IntPoint}
X: -724
Y: -472
input[0][8]
{ClipperLib.IntPoint}
X: -88
Y: -218
input[0][9]
{ClipperLib.IntPoint}
X: -107
Y: -218
input[0][10]
{ClipperLib.IntPoint}
X: -107
Y: -218
input[0][11]
{ClipperLib.IntPoint}
X: -107
Y: -209
input[0][12]
{ClipperLib.IntPoint}
X: -107
Y: -209
input[0][13]
{ClipperLib.IntPoint}
X: -320
Y: -172
input[0][14]
{ClipperLib.IntPoint}
X: -320
Y: -172
input[0][15]
{ClipperLib.IntPoint}
X: -320
Y: 132
input[0][16]
{ClipperLib.IntPoint}
X: -320
Y: 132
input[0][17]
{ClipperLib.IntPoint}
X: -88
Y: 173
input[0][18]
{ClipperLib.IntPoint}
X: -88
Y: 173
input[0][19]
{ClipperLib.IntPoint}
X: -88
Y: -201
input[0][20]
{ClipperLib.IntPoint}
X: -88
Y: -201
input[0][21]
{ClipperLib.IntPoint}
X: -88
Y: -218
为例
这个描述的输入是一个有洞的正方形。
有人甚至知道如何最好地描述这个问题?多边形中的多边形被合并?不允许飞地? – Thijser
我想我可能已经找到了溶剂,但这将取决于答案https://stackoverflow.com/questions/34263601/algoritm-for-translating-list-of-wallsections-into-coherent-polygon – Thijser