static internal void Run() { const double containerSize = 25; const double deltaTime = .001; const double temperature = 293.17; const double reactionRadius = 2; var container = new MyReactingParticleContainer(containerSize, reactionRadius); container.AddRxn("Susceptible+Infected->Infected+Infected", 1, 0); container.AddRxn("Infected->Recovered", 1, 0); container.AddRxn("Infected->Dead", .2, 0); const double massPerson = 5e-25; Color colorSusceptible = Colors.Red; Color colorInfected = Colors.Orange; Color colorRecovered = Colors.Green; Color colorDead = Colors.Blue; container.Dictionary.AddParticle(new ParticleInfo("Susceptible", massPerson, ConvertColor(colorSusceptible))); container.Dictionary.AddParticle(new ParticleInfo("Infected", massPerson, ConvertColor(colorInfected))); container.Dictionary.AddParticle(new ParticleInfo("Recovered", massPerson, ConvertColor(colorRecovered))); container.Dictionary.AddParticle(new ParticleInfo("Dead", massPerson, ConvertColor(colorDead))); var SusceptibleGenerator = new BoltzmannGenerator(container, temperature, container.Dictionary.Map["Susceptible"]); var InfectedGenerator = new BoltzmannGenerator(container, temperature, container.Dictionary.Map["Infected"]); const int nSusceptible = 500; const int nInfected = 1; container.AddRandomParticles(SusceptibleGenerator, nSusceptible, "Susceptible"); container.AddRandomParticles(InfectedGenerator, nInfected, "Infected"); var visualization = new ChemicalVisualization(container) { BoxColor = Colors.IndianRed }; var viz = new MotionVisualizer(visualization) { TimeIncrement = deltaTime, TimeScale = 1, SlowDraw = true }; Timeline.MaximumPoints = 3000; var chemicalGraph = new ChemicalGraph(container, visualization); viz.AddGraph(chemicalGraph, chemicalGraph.Functions); viz.AutoCamera = true; viz.AutoCamera = false; viz.Show(); }
static internal void RunKinematics() { // Level 1 //var engine = new World(0.01, 0, -9.8); //Projectile projectile1 = new Projectile(new Utility.Vector(0, 0, 0), new Utility.Vector(4, 0, Math.PI / 4, false), new Utility.Vector(0, 0, -9.8), 5); //engine.AddProjectile(projectile1); // Level 2 //var engine = new World(0.01, 0.4, -9.8); //Projectile projectile1 = new Projectile(new Utility.Vector(0, 0, 0), new Utility.Vector(4, 0, Math.PI / 4, false), new Utility.Vector(0, 0, -9.8), 5); //engine.AddProjectile(projectile1); // Level 3 //var engine = new World(0.01, 0.4, -9.8); //Projectile projectile1 = new Projectile(new Utility.Vector(1, 1, 1), new Utility.Vector(-2, 1, 3), new Utility.Vector(0, 0, -9.8), 5); //Spring spring1 = new Spring(2, 5, new Utility.Vector(), projectile1.Position); //engine.AddProjectile(projectile1); //engine.AddSpring(spring1); // Challenge // This should connect to your World or Engine class from your kinematics project var engine = new World(0.01, 0.4, -9.8); Projectile projectile1 = new Projectile(new Utility.Vector(1, 1, 1), new Utility.Vector(-2, 1, 3), new Utility.Vector(0, 0, -9.8), 5); Projectile projectile2 = new Projectile(new Utility.Vector(2, 2, 2), new Utility.Vector(1, -3, 4), new Utility.Vector(0, 0, -9.8), 3); Spring spring1 = new Spring(2, 5, new Utility.Vector(), projectile1.Position); Spring spring2 = new Spring(2, 5, projectile1.Position, projectile2.Position); engine.AddProjectile(projectile1); engine.AddProjectile(projectile2); engine.AddSpring(spring1); engine.AddSpring(spring2); // This will work once you define an EngineAdapter that inherits from IEngine var adapter = new EngineAdapter(engine); Sphere3D.NSegments = 40; var visualization = new KinematicsVisualization(adapter); Timeline.MaximumPoints = 3000; var fullViz = new MotionVisualizer(visualization); // For Levels 1-3 //fullViz.Add3DGraph("Position", () => engine.Time, () => ConvertToVector3D(engine.ProjectileList[0].Position), "Time (s)", "Position (m)"); //fullViz.Add3DGraph("Velocity", () => engine.Time, () => ConvertToVector3D(engine.ProjectileList[0].Velocity), "Time (s)", "Velocity (m/s)"); //fullViz.Add3DGraph("Acceleration", () => engine.Time, () => ConvertToVector3D(engine.ProjectileList[0].Acceleration), "Time (s)", "Acceleration (m/s^2)"); // For the challenge fullViz.AddSingleGraph("Distance Between Projectiles", Colors.Teal, () => engine.Time, (() => (engine.ProjectileList[1].Position - engine.ProjectileList[0].Position).Magnitude) , "Time (s)", "Distance (m)"); fullViz.Add3DGraph("CM Position", () => engine.Time, () => ConvertToVector3D(engine.CalcCOM(projectile1, projectile2)), "Time (s)", "CM Position (m)"); fullViz.Add3DGraph("CM Velocity", () => engine.Time, () => ConvertToVector3D((engine.ProjectileList[0].Velocity * engine.ProjectileList[0].Mass + engine.ProjectileList[1].Velocity * engine.ProjectileList[1].Mass) / (engine.ProjectileList[0].Mass + engine.ProjectileList[1].Mass)), "Time (s)", "CM Velocity (m/s)"); fullViz.Add3DGraph("CM Accleration", () => engine.Time, () => ConvertToVector3D((engine.ProjectileList[0].Acceleration * engine.ProjectileList[0].Mass + engine.ProjectileList[1].Acceleration * engine.ProjectileList[1].Mass) / (engine.ProjectileList[0].Mass + engine.ProjectileList[1].Mass)), "Time (s)", "CM Acceleration (m/s^2)"); fullViz.Show(); }
static internal void Run() { const double containerSize = 50; const double minSpeed = 1; const double maxSpeed = 100; const double mass = 4.65e-23; Color color = Colors.Lavender; const int nParticles = 1000; const double deltaTime = .01; const string name = "Molecule"; double temperature = 293.15; var cont = new ParticleContainer(containerSize, containerSize, containerSize); var info = new ParticleInfo(name, mass, ConvertColor(color)); //var generator = new FlatGenerator(cont, minSpeed, maxSpeed); var generator = new BoltzmannDistribution(cont, minSpeed, maxSpeed, temperature); cont.Dictionary.AddParticle(info); cont.AddRandomParticles(generator, name, nParticles); cont.Pressure = cont.Particles.Count * DongUtility.Constants.BoltzmannConstant * cont.GetTemperature() / (50 * 50 * 50); var visualization = new ThermodynamicsVisualization(cont) { BoxColor = Colors.IndianRed }; var viz = new MotionVisualizer(visualization) { TimeIncrement = deltaTime, TimeScale = 1 }; const int histogramBins = 50; viz.AddSingleGraph("Pressure", Colors.CornflowerBlue, () => visualization.Time, () => cont.Pressure, "Time (s)", "Pressure (N/m^2)"); //viz.AddText("Pressure", Colors.CadetBlue, () => cont.GetTemperature() * nParticles * DongUtility.Constants.BoltzmannConstant / (Math.Pow(containerSize,3)) ); //viz.AddSingleGraph("Pressure vs. Temperature", Colors.CornflowerBlue, () => cont.GetTemperature(), () => cont.Pressure, "Temperature (K)", "Pressure (N/m^2)"); viz.AddSingleGraph("Temperature vs. Time", Colors.CornflowerBlue, () => visualization.Time, () => cont.GetTemperature(), "Time (s)", "Temperature (K)"); //viz.AddHist(histogramBins, Colors.BlueViolet, () => cont.GetParticlePropertyList((Particle part) => part.Velocity.Magnitude), "Speed (m/s)"); //Volume vs. Temperature when n and P are constant viz.AddSingleGraph("Volume vs. Temperature", Colors.CornflowerBlue, () => cont.GetTemperature(), () => nParticles * DongUtility.Constants.BoltzmannConstant * cont.GetTemperature() / cont.Pressure, "Temperature (K)", "Volume (m^3)"); //viz.AddText("Volume", Colors.CadetBlue, () => cont.GetTemperature() * nParticles * DongUtility.Constants.BoltzmannConstant / (cont.Pressure) ); viz.AutoCamera = true; viz.AutoCamera = false; viz.Show(); }
static public void Run() { var harePerceptron = TrainHare(); var lynxPerceptron = TrainLynx(); //var arena = PrepareArena(perceptron); var arena = PrepareArenaFinal(); var visualization = new PredatorPreyVisualization(arena); var visualizer = new MotionVisualizer(visualization); visualizer.Show(); }
static internal void RunFiniteElement() { var engine = new KinematicsEngine(); engine.AddForce(new ConstantGravitationForce(engine, new Vector(0, 0, -9.8))); engine.AddForce(new GroundForce(engine)); var ps = new YourParticleStructure(); AddParticleStructure(ps, engine); var adapter = new EngineAdapter(engine); Sphere3D.NSegments = 40; var visualization = new KinematicsVisualization(adapter); visualization.Ground = true; visualization.ConnectorRadiusScale = .1; ProjectileAdapter.VisualSize = .1; AddConnectorsToVisualizer(ps, visualization); Timeline.MaximumPoints = 3000; var fullViz = new MotionVisualizer(visualization); //fullViz.BackgroundFile = "stars.jpg"; //fullViz.Add3DGraph("Position", () => engine.Time, () => ConvertToVector3D(engine.Projectiles[0].Position), "Time (s)", "Position (m)"); //fullViz.Add3DGraph("Velocity", () => engine.Time, () => ConvertToVector3D(engine.Projectiles[0].Velocity), "Time (s)", "Velocity (m/s)"); //fullViz.Add3DGraph("Acceleration", () => engine.Time, () => ConvertToVector3D(engine.Projectiles[0].Acceleration), "Time (s)", "Acceleration (m/s^2)"); //fullViz.Add3DGraph("Center of Mass", () => engine.Time, () => ConvertToVector3D(ps.CalcCOM()), "Time (s)", "Center of Mass (m)"); //fullViz.Add3DGraph("Rotation", () => ps.ProjectileList[0].Position.Polar, () => ConvertToVector3D(ps.ProjectileList[0].Position), "Y Position (m)", "Position"); //fullViz.AddSingleGraph("Rotation Motion", Colors.Teal, () => ps.ProjectileList[0].Position.Y, (() => ps.ProjectileList[0].Position.Z) // , "Y Position", "Z Position"); fullViz.Show(); }
static internal void RunMarbleMadness() { var engine = new KinematicsEngine(); engine.AddForce(new ConstantGravitationForce(engine, new Vector(0, 0, -9.8))); var ps = new YourParticleStructure(); var surfaces = new JayDongMarbleMachine(); AddParticleStructure(ps, engine); AddSurfaces(surfaces, engine); var adapter = new EngineAdapter(engine); Sphere3D.NSegments = 40; var visualization = new KinematicsVisualization(adapter); visualization.Box = true; visualization.ConnectorRadiusScale = .1; ProjectileAdapter.VisualSize = .01; AddConnectorsToVisualizer(ps, visualization); AddSurfacesToVisualizer(surfaces, visualization); Timeline.MaximumPoints = 3000; var fullViz = new MotionVisualizer(visualization); //fullViz.BackgroundFile = "stars.jpg"; fullViz.Add3DGraph("Position", () => engine.Time, () => ConvertToVector3D(engine.Projectiles[0].Position), "Time (s)", "Position (m)"); fullViz.Add3DGraph("Velocity", () => engine.Time, () => ConvertToVector3D(engine.Projectiles[0].Velocity), "Time (s)", "Velocity (m/s)"); fullViz.Add3DGraph("Acceleration", () => engine.Time, () => ConvertToVector3D(engine.Projectiles[0].Acceleration), "Time (s)", "Acceleration (m/s^2)"); //fullViz.AddSingleGraph("Speed", Colors.Teal, () => engine.Time, (() => engine.Projectiles[0].Velocity.Magnitude), // "Time (s)", "Speed (m/s)"); fullViz.Show(); }
static internal void VisualizeFastestDescent(int level, params double[] parameters) { var engine = SetupEngine(level, parameters); var visualization = new DescentVisualization(engine) { PathThickness = .5, PathColor = Colors.IndianRed, ProjectileSize = 1, ProjectileColor = Colors.NavajoWhite }; var fullViz = new MotionVisualizer(visualization); //fullViz.BackgroundFile = "stars.jpg"; fullViz.Add3DGraph("Position", () => engine.Time, () => ConvertVector(engine.Projectile.Position), "Time (s)", "Position (m)"); fullViz.AddText("Time", Colors.MidnightBlue, () => (Math.Round(engine.Time, 3)).ToString() + " s"); fullViz.SlowDraw = true; fullViz.TimeIncrement = .01; fullViz.Show(); }