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();
        }