public bool Insert(T point) { if (!_bounds.Contains(point)) { return(false); } if (_points.Count < MaxSize) { _points.Add(point); return(true); } if (!this.HasChildren) { Split(); } if (_northWest.Insert(point)) { return(true); } if (_northEast.Insert(point)) { return(true); } if (_southWest.Insert(point)) { return(true); } if (_southEast.Insert(point)) { return(true); } // shouldn't happen return(false); }
public List <T> Search(Boundary searchArea) { List <T> points = new List <T>(); if (!_bounds.Intersects(searchArea)) { return(points); } var pointsWithinSearchArea = _points.Where(p => searchArea.Contains(p)); points.AddRange(pointsWithinSearchArea); if (this.HasChildren) { points.AddRange(_northWest.Search(searchArea)); points.AddRange(_northEast.Search(searchArea)); points.AddRange(_southWest.Search(searchArea)); points.AddRange(_southEast.Search(searchArea)); } return(points); }