コード例 #1
0
        public void Remove(QuadItem <T> item)
        {
            var quad = item.__root;

            quad.items.Remove(item);
            item.__root = null;
            quad.Merge();
        }
コード例 #2
0
        public void Insert(QuadItem <T> item)
        {
            var quad = this;

            while (true)
            {
                if (!quad.hasSplit)
                {
                    break;
                }
                var quadrant = quad.GetQuadrant(item.range);
                if (quadrant == -1)
                {
                    break;
                }
                quad = quad.branches[quadrant];
            }
            item.__root = quad;
            quad.items.Add(item);
            quad.Split();
        }
コード例 #3
0
        public void Update(QuadItem <T> item)
        {
            var oldQuad = item.__root;
            var newQuad = item.__root;

            while (true)
            {
                if (newQuad.root == null)
                {
                    break;
                }
                newQuad = newQuad.root;
                if (Misc.FullyIntersects(newQuad.range, item.range))
                {
                    break;
                }
            }
            while (true)
            {
                if (!newQuad.hasSplit)
                {
                    break;
                }
                var quadrant = newQuad.GetQuadrant(item.range);
                if (quadrant == -1)
                {
                    break;
                }
                newQuad = newQuad.branches[quadrant];
            }
            if (oldQuad == newQuad)
            {
                return;
            }
            oldQuad.items.Remove(item);
            newQuad.items.Add(item);
            item.__root = newQuad;
            oldQuad.Merge();
            newQuad.Split();
        }