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); }
public QuadTree(Rect2D range, int capacity) { this.range = range; this.capacity = capacity; data = new List <Circle2D>(); childs = new Dictionary <QuadTreeDirection, QuadTree>(); currDir = QuadTreeDirection.Root; }