/// <summary> /// Creates a fresh new list of particles with random positions and mass. /// </summary> /// <param name="NumParticles">The number of particles to create</param> /// <param name="GridSize">The "radius" of the grid</param> /// <param name="StartingVelocity">The starting velocity of particles</param> public static List<Particle> DEBUG_InitializeParticles(int NumParticles, double GridSize, double StartingVelocity, int Dimensions) { //Create a new list of particles List<Particle> NewList = new List<Particle>(NumParticles); //Create a new property type called "Mass" that will be inherited by all of our particles PropertyType Mass = new PropertyType("Mass", 0, double.PositiveInfinity, false, false); //Create charge PropertyType Charge = new PropertyType("Charge", double.NegativeInfinity, double.PositiveInfinity, false, false); //For each requested number of particles: for (int i = 0; i < NumParticles; i++) { //Create a new 3D particle Particle NewParticle = new Particle(Dimensions); //Randomize a 3D starting position within the given grid size NewParticle.Position = SimMath.RandomEuclideanPosition(Dimensions, GridSize); //Randomize the velocity if given NewParticle.Velocity = SimMath.RandomDirection(3); NewParticle.Velocity.Magnitude *= StartingVelocity; //Set the size for the particles NewParticle.Radius = 1; //Give each particle a random mass and charge ParticleProperty NewParticleMass = new ParticleProperty(Mass); ParticleProperty NewParticleCharge = new ParticleProperty(Charge); NewParticleMass.Value = SimMath.GenerateRandomDouble(1, 10000); int Choice = SimMath.GenerateRandomInteger(1, 3); if (SimMath.GenerateRandomBool()) { NewParticleCharge.Value = PhysicsConstants.ElementaryCharge * 1E12; } else { NewParticleCharge.Value = -PhysicsConstants.ElementaryCharge * 1E12; } NewParticle.Properties.Add(NewParticleMass); NewParticle.Properties.Add(NewParticleCharge); //Add a copy of this particle to the list of particles NewList.Add(NewParticle); } return NewList; }
/// <summary> /// Creates a new particle property of a particular type and value /// </summary> /// <param name="PType">The particle property type (such as "mass" or "charge")</param> /// <param name="Value">The value associated with the new property</param> public ParticleProperty(PropertyType PType, dynamic Value) { this.Type = PType; this.Value = Value; }
/// <summary> /// Adds a property of a particular type and value to this particle /// </summary> /// <param name="PType">The type of property to add (such as "mass" or "charge"</param> /// <param name="Value">The value of the new property</param> public void AddProperty(PropertyType PType, dynamic Value) { if (PType == null) return; this.Properties.Add(new ParticleProperty(PType, Value)); }
/// <summary> /// Creates a new particle property of a particular type. /// </summary> /// <param name="PType">The particle property type (such as "mass" or "charge")</param> public ParticleProperty(PropertyType PType) { this.Type = PType; }