double timeStep; //timestep for solution incrementation #endregion Fields #region Constructors public MainWindow() { InitializeComponent(); rand = new Random(); timer = new DispatcherTimer(); timer.Tick += new EventHandler(timer_Tick); timer.Interval = TimeSpan.FromMilliseconds(100); tbXseed.Text = string.Format("{0}", rand.Next(371, 379)); tbYseed.Text = string.Format("{0}", rand.Next(380, 388)); tbNumParticles.Text = "20"; //draw the initalisation particle Particle p = new Particle(Convert.ToInt32(tbXseed.Text), Convert.ToInt32(tbYseed.Text), 0, 0, Particle.ParticleType.fixedParticle); seedParticle = CreateRectangle(red); PaintCanvas.Children.Add(seedParticle); Canvas.SetTop(seedParticle, p.position.Y - 2); Canvas.SetLeft(seedParticle, p.position.X - 2); }
private void btCreate_Click(object sender, RoutedEventArgs e) { int particleDistance = 5; //initial distance between particles particleList = new List<Particle>(); particleGridWidth = Convert.ToInt32(tbNumParticles.Text); int firstParticleX = (((int)PaintCanvas.ActualWidth - (particleDistance * particleGridWidth)) / 2); int firstParticleY = (((int)PaintCanvas.ActualHeight - (particleDistance * (particleGridWidth + 20))) / 2); //set the seed particle seed = new Particle(Convert.ToInt32(tbXseed.Text), Convert.ToInt32(tbYseed.Text), 0, 0, Particle.ParticleType.fixedParticle); particleList.Add(seed); //fill the list of particles with non-fixed particles for (i = firstParticleX; i < (firstParticleX + particleGridWidth * particleDistance); i += particleDistance) for (j = firstParticleY; j < (firstParticleY + (particleDistance * (particleGridWidth + 20))); j += particleDistance) { if (i > (Convert.ToInt32(tbXseed.Text) - 5) && i < (Convert.ToInt32(tbXseed.Text) + 5) && j > (Convert.ToInt32(tbYseed.Text) - 5) && j < (Convert.ToInt32(tbYseed.Text) + 5)) continue; Particle p = new Particle((i + rand.Next(-2, 3)), (j + rand.Next(-2, 3)), 0, 0, Particle.ParticleType.freeParticle); particleList.Add(p); } //render the initial scene foreach (var particle in particleList) { Rectangle rect; if (particle.pType == Particle.ParticleType.freeParticle) rect = CreateRectangle(blue); else rect = CreateRectangle(red); PaintCanvas.Children.Add(rect); Canvas.SetTop(rect, particle.position.Y - 2); Canvas.SetLeft(rect, particle.position.X - 2); } //set initial conditions for brownian motion calculations mass = 2.325E-27; Temp = 300; relaxTime = 1; timeStep = (double)(1.0 / 30.0); //start timer timer.Start(); }