using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Threading; using System.Text; using System.Windows.Forms; using Sithid.QuadTree; namespace QuadTreeTest { public partial class QuadTreeTest : Form { private double CELL_COUNT = 10000; //Math.Pow( 2, m_Random.Next( 1, 20 ) ); private QuadNode m_Tree; private static Random m_Random = new Random(); public QuadTreeTest() { InitializeComponent(); Populate(); } private long m_StartMemory = 0; private long m_FinishMemory = 0; private TimeSpan m_Clock; private void Populate() { m_Tree = new QuadNode( new RectangleF( this.Bounds.Left + 5, this.Bounds.Top, 1340, 900 ), null ); PointF loc = new PointF(); DateTime start = DateTime.Now; Thread.MemoryBarrier(); m_StartMemory = System.GC.GetTotalMemory( true ); for( int i = 0; i < CELL_COUNT; ++i ) { loc = new PointF( RandomFloat( m_Tree.Bounds.X, m_Tree.Bounds.Width ), RandomFloat( m_Tree.Bounds.Y, m_Tree.Bounds.Height ) ); QuadPoint tp = new QuadPoint( new RectangleF( loc, new Size( m_Random.Next( 1, 5 ), m_Random.Next( 1, 5 ) ) ), m_Tree, loc ); m_Tree.Add( tp ); } m_FinishMemory = System.GC.GetTotalMemory( true ); m_Clock = DateTime.Now - start; this.Invalidate(); } private float RandomFloat( double min, double max ) { return (float)( ( max - min ) * m_Random.NextDouble() + min ); } protected override void OnPaint( PaintEventArgs e ) { if( m_Tree != null ) { this.Text = String.Format( "QuadTree_Test: {0} Objects, Created In {1} Minutes, {2}.{3} seconds, Memory Usage: Start: {4}Kb, Finish: {5}Kb, Difference: {6}Kb", m_Tree.TotalObjects, m_Clock.Minutes, m_Clock.Seconds, m_Clock.Milliseconds, m_StartMemory / 1024, m_FinishMemory / 1024, ( m_FinishMemory - m_StartMemory ) / 1024 ); m_Tree.Draw( e.Graphics, MousePosition, false ); } base.OnPaint( e ); } } }