static internal void Run() { const double containerSize = 50; const double minSpeed = 0; const double maxSpeed = 4200; const double mass = 1.7e-25; Color color = Colors.Lavender; const int nParticles = 1000; const double deltaTime = 0.1; const string name = "Molecule"; double temperature = 293.15; var cont = new ParticleContainer(containerSize); var info = new ParticleInfo(name, mass, ConvertColor(color)); var generator = new BoltzmannGenerator(cont, minSpeed, maxSpeed); cont.Dictionary.AddParticle(info); cont.AddRandomParticles(generator, name, nParticles); var visualization = new ThermodynamicsVisualization(cont) { BoxColor = Colors.IndianRed }; var viz = new MotionVisualizer3DControl(visualization) { TimeIncrement = deltaTime, TimeScale = 1 }; viz.FastDraw = true; const int histogramBins = 50; viz.Manager.AddSingleGraph("Temperature", ConvertColor(Colors.CornflowerBlue), () => visualization.Time, () => cont.GetTemperature(), "Time (s)", "Temperature (K)"); viz.Manager.AddHist(histogramBins, ConvertColor(Colors.BlueViolet), () => cont.GetParticlePropertyList((Particle part) => part.Velocity.Magnitude), "Speed (m/s)"); //viz.Manager.AddText("Temperature (K)", ConvertColor(Colors.CadetBlue), () => GetTemperature(cont)+""); viz.Manager.AddSingleGraph("Pressure", ConvertColor(Colors.Red), () => visualization.Time, () => cont.Pressure, "Time (s)", "Pressure (Pa)"); viz.Manager.AddSingleGraph("# Particles", ConvertColor(Colors.Green), () => visualization.Time, () => cont.Particles.Count, "Time (s)", "# Particles"); viz.Manager.AddSingleGraph("Volume", ConvertColor(Colors.Orange), () => visualization.Time, () => Math.Pow(cont.Size.X, 3), "Time (s)", "Volume (m^3)"); viz.Show(); }
static internal void RunPlanetaryPool() { var structure = new GravitationalStructureArchanDas(); World world = new World(); foreach (Tetrahedron tet in structure.GetTetrahedra()) { world.AddProjectile(new ProjectileN.Tetrahedron(ConvertToUtilityVector(tet.Points[0]), ConvertToUtilityVector(tet.Points[1]), ConvertToUtilityVector(tet.Points[2]), ConvertToUtilityVector(tet.Points[3]), tet.Mass)); } Projectile projectile = new Projectile(position: ConvertToUtilityVector(structure.StartingPoint.PositionVector()), velocity: ConvertToUtilityVector(structure.StartingVelocity), acceleration: new UtilityLibraries.Vector(0, 0, 0), mass: 100000); Dictionary <ProjectileParent, ProjectileParent> conn = new Dictionary <ProjectileParent, ProjectileParent>(); foreach (ProjectileParent p in world.projectiles) { conn.Add(p, projectile); } world.connections = conn; world.AddProjectile(projectile); var engine = new WorldAdapter(world); var visualization = new PlanetaryPoolVisualization(structure, engine); Timeline.MaximumPoints = 3000; var fullViz = new MotionVisualizer3DControl(visualization); fullViz.Manager.Add3DGraph("Position", () => engine.Time, () => ConvertToDongUtilityVector(engine.Projectiles[engine.Projectiles.Count - 1].Position), "Time (s)", "Position (m)"); fullViz.Manager.Add3DGraph("Velocity", () => engine.Time, () => ConvertToDongUtilityVector(engine.Projectiles[engine.Projectiles.Count - 1].Velocity), "Time (s)", "Velocity (m/s)"); fullViz.Manager.Add3DGraph("Acceleration", () => engine.Time, () => ConvertToDongUtilityVector(engine.Projectiles[engine.Projectiles.Count - 1].Acceleration), "Time (s)", "Acceleration (m/s^2)"); fullViz.Manager.AddSingleGraph("X vs. Y", ConvertColor(Colors.Teal), () => engine.Projectiles[engine.Projectiles.Count - 1].Position.X, (() => engine.Projectiles[0].Position.X), "Y (m)", "X (m)"); fullViz.FastDraw = true; fullViz.Show(); }
/// <summary> /// Runs a trajectory file already created (as a test) /// To use this, modify Driver.cs to point to this function instead of RunPlanetaryPool() /// And, of course, change the filename /// </summary> static internal void TestTrajectoryFile() { var fullViz = new MotionVisualizer3DControl(@"C:\Users\creek\Documents\Trajectory.dat", new VisualizerControl.VisualizerCommandFileReader()); fullViz.Show(); }