gpt4 book ai didi

c# - 剪辑如何在 Clipper 库中的多边形联合中工作

转载 作者:行者123 更新时间:2023-11-30 20:02:11 26 4
gpt4 key购买 nike

enter image description here

我使用 clipper library .图中红色和黑色是夹子,绿色是多边形。下面列出了代码。但是,我不明白为什么生成的联合多边形是 (7 3 4 14 9 1 2 6)。 我认为它应该是 (1 4 14 9)?编号是图中所示的顶点。

using System;
using ClipperLib;

using Polygon = System.Collections.Generic.List<ClipperLib.IntPoint>;
using Polygons = System.Collections.Generic.List<System.Collections.Generic.List<ClipperLib.IntPoint>>;

namespace ClipperLibrary_Test
{
class Program
{
static void Main(string[] args)
{
Polygons subj = new Polygons(1);
subj.Add(new Polygon(4));
subj[0].Add(new IntPoint(0, 0));
subj[0].Add(new IntPoint(0, 70));
subj[0].Add(new IntPoint(100, 70));
subj[0].Add(new IntPoint(100, 0));

Polygons clip = new Polygons();
clip.Add(new Polygon(4));
clip[0].Add(new IntPoint(40, 0));
clip[0].Add(new IntPoint(40, 100));
clip[0].Add(new IntPoint(150, 100));
clip[0].Add(new IntPoint(150, 0));

clip.Add(new Polygon(4));
clip[1].Add(new IntPoint(-50, 0));
clip[1].Add(new IntPoint(-50, 100));
clip[1].Add(new IntPoint(60, 100));
clip[1].Add(new IntPoint(60, 0));

Polygons solution = new Polygons();
Clipper c = new Clipper();
c.AddPolygons(subj, PolyType.ptSubject);
c.AddPolygons(clip, PolyType.ptClip);

c.Execute(ClipType.ctUnion, solution, PolyFillType.pftEvenOdd, PolyFillType.pftEvenOdd);

foreach (Polygon p in solution)
{
Console.WriteLine("next ");
foreach (IntPoint pt in p)
{
Console.WriteLine("(" + pt.X + "; " + pt.Y + ")");
}
}
//Console.WriteLine("area: " + Clipper.Area(solution[0]).ToString());
Console.WriteLine(solution.Count);
Console.WriteLine("right: " + c.GetBounds().right + ": left: " + c.GetBounds().left);
}
}
}

编辑:

如果我将 PolyFillType.pftEvenOdd 更改为 PolyFillType.pftNonZero,它可以正常工作。谁能解释一下它如何影响结果?

最佳答案

这是因为您为 subjclip 使用了 PolyFillType.pftEvenOdd 填充类型。指定的 filltype 操作分别在两个输入集上执行。在您的示例中,它对 subj 不执行任何操作,但会清除 clip 的两个矩形的公共(public)部分,从而给出不相交的矩形。并集包含这两个独立的矩形加上不变的主题。

只需将clip的填充类型改为PolyFillType.pftPositive即可得到预期的结果。

我使用了这个来源:

关于c# - 剪辑如何在 Clipper 库中的多边形联合中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17098403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com