コード例 #1
0
        private void AddToTree(Tuple <T, IntegerBoundingBox> Item, int SubdivideThreshold)
        {
            if (!Bounds.Intersects(Item.Item2))
            {
                return;
            }

            if (Children != null)
            {
                for (var i = 0; i < 8; ++i)
                {
                    Children[i].AddToTree(Item, SubdivideThreshold);
                }
            }
            else if (Items.Count == SubdivideThreshold && Bounds.Width > 8)
            {
                Subdivide();
                for (var i = 0; i < Items.Count; ++i)
                {
                    for (var c = 0; c < 8; ++c)
                    {
                        Children[c].AddToTree(Items[i], SubdivideThreshold);
                    }
                }
                for (var c = 0; c < 8; ++c)
                {
                    Children[c].AddToTree(Item, SubdivideThreshold);
                }
                Items.Clear();
            }
            else
            {
                Items.Add(Item);
            }
        }
コード例 #2
0
 public void FindItemsInBox(IntegerBoundingBox SearchBounds, HashSet <T> results)
 {
     if (SearchBounds.Intersects(Bounds))
     {
         if (Children == null)
         {
             for (var i = 0; i < Items.Count; ++i)
             {
                 if (Items[i].Item2.Intersects(SearchBounds))
                 {
                     results.Add(Items[i].Item1);
                 }
             }
         }
         else
         {
             for (var i = 0; i < 8; ++i)
             {
                 Children[i].FindItemsInBox(SearchBounds, results);
             }
         }
     }
 }