public void Remove() { var range = new Range(1, 1, 5, 5); var tree = new QuadTree(100, 100) .Insert(range) .Remove(range); Assert.AreEqual(0, tree.Count); }
public void IsNodeEmpty_Bug() { var tree = new QuadTree(14, 14); var range = new Range(1, 1, 1, 1); tree.Insert(range); Assert.AreEqual(range, tree.QueryFirst(range)); }
public void SinglePosition() { var range = new Range(1, 1, 5, 5); var results = new QuadTree(100, 100) .Insert(range) .Query(range); Assert.AreEqual(1, results.Count); Assert.AreEqual(range, results[0]); }
public List<Range> GetRanges(QuadTree tree) { List<Range> results = new List<Range>(); for (var col = 0; col < tree.Bounds.ColumnsCount; col++) for (var row = 0; row < tree.Bounds.RowsCount; row++) { List<Range> ranges = null; IPerformanceCounter counter = null; using (counter = new PerformanceCounter()) { ranges = tree.Query(new Position(row, col)); } TotalQueries ++; TotalTimeSpent += counter.GetMilisec(); results.AddRange(ranges); } AverageTimeSpent = TotalTimeSpent / TotalQueries; return results; }
public void CreateNewRoot() { var tree = new QuadTree(1, 1); tree.Grow(); Assert.AreEqual(4, tree.Root.Nodes.Count); var node = tree.Root; Assert.AreEqual(new Range(1, 1, 2, 2), tree.Bounds); Assert.AreEqual(new Range(1, 1, 1, 1), node.Nodes[0].Bounds); Assert.AreEqual(new Range(1, 2, 1, 2), node.Nodes[1].Bounds); Assert.AreEqual(new Range(2, 1, 2, 1), node.Nodes[2].Bounds); Assert.AreEqual(new Range(2, 2, 2, 2), node.Nodes[3].Bounds); tree.Grow(); Assert.AreEqual(4, tree.Root.Nodes.Count); node = tree.Root; Assert.AreEqual(new Range(1, 1, 4, 4), tree.Bounds); Assert.AreEqual(new Range(1, 1, 2, 2), node.Nodes[0].Bounds); Assert.AreEqual(new Range(1, 3, 2, 4), node.Nodes[1].Bounds); Assert.AreEqual(new Range(3, 1, 4, 2), node.Nodes[2].Bounds); Assert.AreEqual(new Range(3, 3, 4, 4), node.Nodes[3].Bounds); }
/// <summary> /// Create the renderer, give the QuadTree to render. /// </summary> /// <param name="quadTree"></param> public QuadTreeRenderer(QuadTree<Item> quadTree) { m_quadTree = quadTree; }
public void ForEach(QuadTree.QTAction action) { action(this); // draw the child quads foreach (QuadTreeNode node in this.m_nodes) node.ForEach(action); }
/// <summary> /// Construct a quadtree node with the given bounds /// </summary> public QuadTreeNode(Range bounds, int currentDepth, QuadTree quadTree) :this(bounds) { m_bounds = bounds; QuadTree = quadTree; Depth = currentDepth + 1; }
/// <summary> /// Initialize the QuadTree to the size of the window. /// Initialize the QuadTreeRenderer /// </summary> private void Init() { m_quadTree = new QuadTree<Item>(this.ClientRectangle); m_renderer = new QuadTreeRenderer(m_quadTree); }
public void TestSpannedRangesList_And_QuadTree() { int row = 5000; int column = 20; var ranges = new RangeCreator(row, column, 2).CreateRanges(); Console.WriteLine(); Console.WriteLine("testing foreach"); Console.WriteLine(string.Format( "Total {0} spanned ranges", ranges.SpannedRangesList.Count)); var rangeGetter = new RangeGetter(); var resultForeach = rangeGetter.GetRanges(ranges); PrintResult(rangeGetter, resultForeach); ranges = new RangeCreator(row, column, 2).CreateRanges(); Console.WriteLine(); Console.WriteLine("testing quad tree"); Console.WriteLine(string.Format( "Total {0} spanned ranges", ranges.SpannedRangesList.Count)); var tree = new QuadTree(new Range(0, 0, ranges.RowCount - 1, ranges.ColCount - 1)); tree.QuadTreeNodeDivider = new ProportioanteSizeNodeDivider(); tree.Insert(ranges.SpannedRangesList); rangeGetter = new RangeGetter(); var resultQuad = rangeGetter.GetRanges(tree); PrintResult(rangeGetter, resultQuad); Console.WriteLine(string.Format("max tree depth: {0}", tree.MaxDepth)); Assert.AreEqual(resultQuad.Count, resultForeach.Count); for (int i = 0; i < resultQuad.Count; i++) { Assert.AreEqual(resultQuad[i], resultForeach[i]); } }
public void Test_QuadTree_And_SpannedRangesList_Results_Are_Exactly_Same() { var ranges = new RangeCreator(1000, 4, 2).CreateRanges(); var resultSpann = new RangeGetter().GetRanges(ranges); //var ranges = CreateRanges(); var tree = new QuadTree(new Range(0, 0, ranges.RowCount, ranges.ColCount)); tree.Insert(ranges.SpannedRangesList); var resultQuad = new RangeGetter().GetRanges(tree); Assert.AreEqual(resultSpann.Count, resultQuad.Count); }
public void TestQuadTree_ReturnFirstResult() { // shows that there is differnece between // returning only the first result, and traversin whole tree // speed difference is // for returning only first - 650 ms // returning all - 1450ms // around 2x :) nice var ranges = new RangeCreator(10000, 10, 2).CreateRanges(); Console.WriteLine("testing quad tree"); Console.WriteLine(string.Format( "Total {0} spanned ranges", ranges.SpannedRangesList.Count)); var tree = new QuadTree(new Range(0, 0, ranges.RowCount - 1, ranges.ColCount - 1)); tree.QuadTreeNodeDivider = new ProportioanteSizeNodeDivider(); tree.Insert(ranges.SpannedRangesList); var rangeGetter = new RangeGetter(); Console.WriteLine(string.Format( "Total result count {0}", rangeGetter.GetRangesFirst(tree).Count)); Console.WriteLine(string.Format( "Total time {0} ms", rangeGetter.TotalTimeSpent)); Console.WriteLine(string.Format( "Average time {0} ", rangeGetter.AverageTimeSpent)); Console.WriteLine(string.Format( "Total queries {0} ", rangeGetter.TotalQueries)); }
public void TestQuadTree() { // shows that the difference between space partitioners // is around 60 times :) nice // with HalfSizeNodeDivider - // Total 30000 spanned ranges // Total result count 90000 // Total time 81812 ms // Average time 0,81812 // Total queries 100000 // with ProportioanteSizeNodeDivider - // Total 30000 spanned ranges // Total result count 90000 // Total time 1371 ms // Average time 0,01371 // Total queries 100000 var ranges = new RangeCreator(10000, 10, 2).CreateRanges(); Console.WriteLine("testing quad tree"); Console.WriteLine(string.Format( "Total {0} spanned ranges", ranges.SpannedRangesList.Count)); var tree = new QuadTree(new Range(0, 0, ranges.RowCount - 1, ranges.ColCount - 1)); tree.QuadTreeNodeDivider = new ProportioanteSizeNodeDivider(); tree.Insert(ranges.SpannedRangesList); var rangeGetter = new RangeGetter(); Console.WriteLine(string.Format( "Total result count {0}", rangeGetter.GetRanges(tree).Count)); Console.WriteLine(string.Format( "Total time {0} ms", rangeGetter.TotalTimeSpent)); Console.WriteLine(string.Format( "Average time {0} ", rangeGetter.AverageTimeSpent)); Console.WriteLine(string.Format( "Total queries {0} ", rangeGetter.TotalQueries)); }
public SimpleAgent(QuadTree world) { Space = world; }