예제 #1
0
        public void Subdivide(QuadTreeDirection qtd)
        {
            var center   = range.GetCenter();
            var halfsize = range.GetHalfSize();

            var step = Vector2.Zero;

            switch (qtd)
            {
            case QuadTreeDirection.LeftBottom:
                step = new Vector2(-1, -1);
                break;

            case QuadTreeDirection.LeftUp:
                step = new Vector2(-1, +1);
                break;

            case QuadTreeDirection.RightUp:
                step = new Vector2(+1, +1);
                break;

            case QuadTreeDirection.RightBottom:
                step = new Vector2(+1, -1);
                break;
            }

            var child = new QuadTree(new Rect2D(center + step * halfsize / 2, halfsize / 2), capacity);

            child.parent  = this;
            child.currDir = qtd;

            childs.Add(qtd, child);
        }
예제 #2
0
        public QuadTree(Rect2D range, int capacity)
        {
            this.range    = range;
            this.capacity = capacity;

            data    = new List <Circle2D>();
            childs  = new Dictionary <QuadTreeDirection, QuadTree>();
            currDir = QuadTreeDirection.Root;
        }