Пример #1
0
        public static Envelope2 <T> Bound(Envelope2 <T> a, Envelope2 <T> b)
        {
            if (a == null)
            {
                return(b);
            }
            else if (b == null)
            {
                return(a);
            }

            T minX = a.MinX;
            T maxX = a.MaxX;
            T minY = a.MinY;
            T maxY = a.MaxY;

            if (minX.CompareTo(b.MinX) > 0)
            {
                minX = b.MinX;
            }
            if (minY.CompareTo(b.MinY) > 0)
            {
                minY = b.MinY;
            }
            if (maxX.CompareTo(b.MaxX) < 0)
            {
                maxX = b.MaxX;
            }
            if (maxY.CompareTo(b.MaxY) < 0)
            {
                maxY = b.MaxY;
            }
            return(new Envelope2 <T>(minX, minY, maxX, maxY));
        }
Пример #2
0
        public int CompareTo(Envelope2 <T> other)
        {
            if (other == null)
            {
                return(1);
            }
            if (this.MinX.CompareTo(other.MaxX) > 0)
            {
                return(1);
            }
            if (this.MaxX.CompareTo(other.MinX) < 0)
            {
                return(-1);
            }
            //x overlaps
            int res = this.MinX.CompareTo(other.MinX);

            if (res != 0)
            {
                return(res);
            }
            res = this.MaxX.CompareTo(other.MaxX);
            if (res != 0)
            {
                return(res);
            }
            res = this.MinY.CompareTo(other.MinY);
            if (res != 0)
            {
                return(res);
            }
            return(this.MaxY.CompareTo(other.MaxY));
        }
Пример #3
0
 public bool Equals(Envelope2 <T> other)
 {
     if (other == null)
     {
         return(false);
     }
     return(this.MinX.Equals(other.MinX) && this.MinY.Equals(other.MinY) && this.MaxX.Equals(other.MaxX) && this.MaxY.Equals(other.MaxY));
 }
Пример #4
0
 public static bool PointInside(Envelope2 <T> env, T X, T Y)
 {
     if (X.CompareTo(env.MinX) < 0 || X.CompareTo(env.MaxX) > 0)
     {
         return(false);
     }
     return(Y.CompareTo(env.MinY) >= 0 && Y.CompareTo(env.MaxY) <= 0);
 }
Пример #5
0
 public Envelope2(Envelope2 <T> cloned)
 {
     if (cloned == null)
     {
         throw new ArgumentNullException();
     }
     this.MinX = cloned.MinX;
     this.MaxX = cloned.MaxX;
     this.MinY = cloned.MinY;
     this.MaxY = cloned.MaxY;
 }
Пример #6
0
        public static Envelope2 <T> Bound(IEnumerable <Envelope2 <T> > boundaries)
        {
            if (boundaries == null)
            {
                throw new ArgumentNullException();
            }
            IEnumerator <Envelope2 <T> > enu = boundaries.GetEnumerator();

            if (!enu.MoveNext())
            {
                return(null);
            }

            Envelope2 <T> cur = enu.Current;

            while (cur == null && enu.MoveNext())
            {
                cur = enu.Current;
            }
            if (cur == null)
            {
                return(null);
            }

            T minX = cur.MinX;
            T maxX = cur.MaxX;
            T minY = cur.MinY;
            T maxY = cur.MaxY;

            while (enu.MoveNext())
            {
                cur = enu.Current;
                if (minX.CompareTo(cur.MinX) > 0)
                {
                    minX = cur.MinX;
                }
                if (minY.CompareTo(cur.MinY) > 0)
                {
                    minY = cur.MinY;
                }
                if (maxX.CompareTo(cur.MaxX) < 0)
                {
                    maxX = cur.MaxX;
                }
                if (maxY.CompareTo(cur.MaxY) < 0)
                {
                    maxY = cur.MaxY;
                }
            }
            return(new Envelope2 <T>(minX, minY, maxX, maxY));
        }
Пример #7
0
 public static bool EnvelopeContain(Envelope2 <T> container, Envelope2 <T> contained)
 {
     if (container == null || contained == null)
     {
         return(false);
     }
     if (container.MinX.CompareTo(contained.MinX) > 0 ||
         container.MaxX.CompareTo(container.MaxX) < 0 ||
         container.MinY.CompareTo(contained.MinY) > 0 ||
         container.MaxY.CompareTo(container.MaxY) < 0)
     {
         return(false);
     }
     return(true);
 }
Пример #8
0
 public static bool EnvelopeOverlap(Envelope2 <T> a, Envelope2 <T> b)
 {
     if (a == null || b == null)
     {
         return(false);
     }
     if (a.MinX.CompareTo(b.MaxX) > 0)
     {
         return(false);
     }
     if (b.MinX.CompareTo(a.MaxX) > 0)
     {
         return(false);
     }
     if (a.MinY.CompareTo(b.MaxY) > 0)
     {
         return(false);
     }
     if (b.MinY.CompareTo(a.MaxY) > 0)
     {
         return(false);
     }
     return(true);
 }