Clipperlib не ведет себя так, как задумано, когда выполняется объединение на мультиполигоне

Я пытаюсь объединить мультиполигон, но он не работает должным образом, как показано на рисунке ниже:

Код, который я использую:

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

namespace Ylp.ComputationalGeometry
{
    public static class Merge
    {
        public static IList<IList<double>> Multipolygon(IList<IList<IList<IList<double>>>> multiPolygon)
        {
            const double precisionFactor = 1000000000000000.0;

            //precondition: all your polygons have the same orientation 
            //(ie either clockwise or counter clockwise)
            Polygons polys = new Polygons();

            multiPolygon.ForEach(x =>
            {
                Polygon polygon = x.First().Select( y => new IntPoint()
                {
                    X = (long)(y[0] * precisionFactor),
                    Y = (long)(y[1] * precisionFactor)
                }).ToList();

                polys.Add(polygon);
            });

            Polygons solution = new Polygons();
            Clipper c = new Clipper();
            c.AddPaths(polys, PolyType.ptSubject,true);
            c.Execute(ClipType.ctUnion, solution,
                PolyFillType.pftNonZero, PolyFillType.pftNonZero);

            var coordinates = solution.SelectMany(x => x.Select(y=> (IList<double>)new List<double>()
            {
                y.X / precisionFactor,
                y.Y / precisionFactor
            }).ToList()) .ToList();

            return coordinates;
        }
    }
}

Я действительно хочу, чтобы результат объединения выглядел следующим образом, поэтому любые пересечения в середине следует игнорировать и создать область, охватывающую обе фигуры:

и оригинальная форма:

0 ответов

Другие вопросы по тегам