示例#1
0
		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));
		}
示例#3
0
		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]);
		}
示例#4
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);
		}
示例#6
0
 /// <summary>
 /// Create the renderer, give the QuadTree to render.
 /// </summary>
 /// <param name="quadTree"></param>
 public QuadTreeRenderer(QuadTree<Item> quadTree)
 {
     m_quadTree = quadTree;
 }
示例#7
0
		public void ForEach(QuadTree.QTAction action)
		{
			action(this);

			// draw the child quads
			foreach (QuadTreeNode node in this.m_nodes)
				node.ForEach(action);
		}
示例#8
0
		/// <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;
		}
示例#9
0
 /// <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));
		}
示例#14
0
 public SimpleAgent(QuadTree world)
 {
     Space = world;
 }