public bool Insert(Circle2D o) { if (!range.Contains(o.GetCenter())) { return(false); } if (data.Count < capacity) { data.Add(o); return(true); } if (!childs.ContainsKey(QuadTreeDirection.LeftBottom)) { Subdivide(QuadTreeDirection.LeftBottom); } if (childs[QuadTreeDirection.LeftBottom].Insert(o)) { return(true); } if (!childs.ContainsKey(QuadTreeDirection.LeftUp)) { Subdivide(QuadTreeDirection.LeftUp); } if (childs[QuadTreeDirection.LeftUp].Insert(o)) { return(true); } if (!childs.ContainsKey(QuadTreeDirection.RightUp)) { Subdivide(QuadTreeDirection.RightUp); } if (childs[QuadTreeDirection.RightUp].Insert(o)) { return(true); } if (!childs.ContainsKey(QuadTreeDirection.RightBottom)) { Subdivide(QuadTreeDirection.RightBottom); } if (childs[QuadTreeDirection.RightBottom].Insert(o)) { return(true); } return(false); }