Beispiel #1
0
        // -------------------------------------------------
        // Util
        // -------------------------------------------------

        private static Geometry.Interval RelativeEnvelopeLon(Geometry.IRandomAccessRange <Geometry.Point> points, bool closed, Geometry.Unit unit)
        {
            Geometry.Interval result = null;

            if (points.Count < 1)
            {
                result = new Geometry.Interval();
                Geometry.AssignInverse(result);
                return(result);
            }

            double x0 = points[0][0];

            result = new Geometry.Interval(x0);

            int count = points.Count + (closed ? 1 : 0);

            for (int ii = 1; ii < count; ++ii)
            {
                int    i        = ii % points.Count;
                double xi       = points[i][0];
                double distNorm = Geometry.NormalizedAngleSigned(xi - x0, unit); // [-pi, pi]
                double x1       = x0 + distNorm;
                result.Expand(x1);
                x0 = x1;
            }
            return(result);
        }
Beispiel #2
0
 public static Geometry.Interval RelativeEnvelopeLon(Geometry.IRandomAccessRange <Geometry.Point> outer,
                                                     IEnumerable <Geometry.IRandomAccessRange <Geometry.Point> > inners,
                                                     Geometry.Unit unit)
 {
     Geometry.Interval result = RelativeEnvelopeLon(outer, true, unit);
     foreach (var inner in inners)
     {
         result.Expand(RelativeEnvelopeLon(inner, true, unit));
     }
     return(result);
 }