public List <QuadTreeElement <T> > Query(QuadRectangle <T> range, List <QuadTreeElement <T> > result = null) { if (result == null) { result = new List <QuadTreeElement <T> >(); } if (!boundry.Intersects(range)) { return(null); } foreach (QuadTreeElement <T> point in points) { if (range.BoundryContains(point)) { result.Add(point); } } if (subdivided) { topLeft.Query(range, result); topRight.Query(range, result); bottomLeft.Query(range, result); bottomRight.Query(range, result); } return(result); }
public bool Insert(QuadTreeElement <T> p) { if (!boundry.BoundryContains(p)) { return(false); } if (points.Count < capacity) { points.Add(p); return(true); } else { if (!subdivided) { Subdivide(); } if (topLeft.Insert(p)) { return(true); } else if (topRight.Insert(p)) { return(true); } else if (bottomLeft.Insert(p)) { return(true); } else if (bottomRight.Insert(p)) { return(true); } return(false); } }