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)); }
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)); }
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)); }
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); }
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; }
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)); }
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); }
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); }