Ejemplo n.º 1
0
        public static void LoadNineBodiesScenario(GravitySim sim)
        {
            const double baseSize = 30.0;
            const double baseMass = 100000.0;

            SetScenarioName(sim, "9 Bodies Scenario");

            sim.ClearSim();

            sim.SetSimSpace(new SimulationSpace(SimulationSpace.Space.Toy));
            sim.SetAccelerationLimits(true, toySpaceScenariosDefaultAccelerationLimit, toySpaceScenariosDeaultMinimumSeparation);
            sim.SetCalculationSettings(new CalculationSettings(10, false, false));
            sim.SetSimRounding(8);      // 0 -> Symmetry breaks down at ~75 sec.
            // 8 -> Works well

            sim.SetCheckSim(false);

            sim.AddBody(baseMass, baseSize, 3, GravitySim.BodyStartPosition.StageLeft);
            sim.AddBody(baseMass, baseSize, 2, GravitySim.BodyStartPosition.StageTop);
            sim.AddBody(baseMass, baseSize, 1, GravitySim.BodyStartPosition.StageRight);
            sim.AddBody(baseMass, baseSize, 7, GravitySim.BodyStartPosition.StageBottom);
            sim.AddBody(baseMass, baseSize, 4, GravitySim.BodyStartPosition.StageTopLeft);
            sim.AddBody(baseMass, baseSize, 5, GravitySim.BodyStartPosition.StageTopRight);
            sim.AddBody(baseMass, baseSize, 6, GravitySim.BodyStartPosition.StageBottomRight);
            sim.AddBody(baseMass, baseSize, 8, GravitySim.BodyStartPosition.StageBottomLeft);
            sim.AddBody(baseMass, baseSize, 9, GravitySim.BodyStartPosition.CenterOfTheUniverse);

            sim.SetMonitoredBody(8);   // center = 8
            sim.SetMonitoredValues();
        }
Ejemplo n.º 2
0
        public static void LoadFourBodiesScenario(GravitySim sim)
        {
            const double baseMass = 100000.0;

            SetScenarioName(sim, "4 Bodies Scenario");

            sim.ClearSim();
            sim.SetSimSpace(new SimulationSpace(SimulationSpace.Space.Toy));
            sim.AddBody(baseMass, 4.0, 3, GravitySim.BodyStartPosition.StageLeft);
            sim.AddBody(baseMass, 4.0, 2, GravitySim.BodyStartPosition.StageTop);
            sim.AddBody(baseMass, 4.0, 1, GravitySim.BodyStartPosition.StageRight);
            sim.AddBody(baseMass, 4.0, 7, GravitySim.BodyStartPosition.StageBottom);
            sim.SetMonitoredBody(0);
            sim.SetMonitoredValues();
            // sim.SetCheckSim(true);
            // sim.SetSimRounding(3);
            sim.SetAccelerationLimits(true, toySpaceScenariosDefaultAccelerationLimit, toySpaceScenariosDeaultMinimumSeparation);
        }
Ejemplo n.º 3
0
        public static void LoadToyOrbitingBodiesScenario(GravitySim sim)
        {
            const double baseMass = 100000.0;

            SetScenarioName(sim, "Orbiting Bodies Scenario");

            sim.ClearSim();

            sim.SetSimSpace(new SimulationSpace(SimulationSpace.Space.Toy));
            sim.SetCalculationSettings(new CalculationSettings(10, false, false));       // To produce braided pattern of trails change calcsPerFrame to 1
            // calcsPerFrame = 10000 is good for one body orbiting

            // sim.AddBody(baseMass, 2.0, 1, GravitySim.bodyStartPosition.stageLeft, new SimPoint(0.0, 50.5), false);
            //sim.AddBody(baseMass, 2.0, 2, GravitySim.bodyStartPosition.stageLeft, new SimPoint(0.0, 40.0), false);
            //sim.AddBody(baseMass, 2.0, 4, GravitySim.bodyStartPosition.stageLeft, new SimPoint(0.0, 30.0), false);
            //sim.AddBody(baseMass, 2.0, 6, GravitySim.bodyStartPosition.stageLeft, new SimPoint(0.0, 20.0), false);
            //sim.AddBody(baseMass, 2.0, 3, GravitySim.bodyStartPosition.stageLeft, new SimPoint(0.0, 60.0), false);
            sim.AddBody(0.1 * baseMass, 40.0, 5, GravitySim.BodyStartPosition.StageTopLeft, new SimPoint(-38.9, -38.9), true);
            sim.AddBody(10.0 * baseMass, 80.0, 8, GravitySim.BodyStartPosition.CenterOfTheUniverse, new SimPoint(0.389, 0.380), true);
            sim.SetMonitoredBody(0);
            sim.SetMonitoredValues();
            sim.SetAccelerationLimits(false, 0.0, 0.0);
        }
Ejemplo n.º 4
0
        public static void LoadFiveBodiesScenario(GravitySim sim, bool diagonals)
        {
            const double baseSize = 30.0;
            const double baseMass = 100000.0;

            if (diagonals)
            {
                SetScenarioName(sim, "5 Bodies Scenario - Diagonals");
            }
            else
            {
                SetScenarioName(sim, "5 Bodies Scenario - Cross");
            }

            sim.ClearSim();

            sim.SetSimSpace(new SimulationSpace(SimulationSpace.Space.Toy));
            sim.SetAccelerationLimits(true, toySpaceScenariosDefaultAccelerationLimit, toySpaceScenariosDeaultMinimumSeparation);
            sim.SetCalculationSettings(new CalculationSettings(10, false, false));
            sim.SetSimRounding(0);

            if (diagonals)
            {
                sim.AddBody(baseMass, baseSize, 4, GravitySim.BodyStartPosition.StageTopLeft);
                sim.AddBody(baseMass, baseSize, 5, GravitySim.BodyStartPosition.StageTopRight);
                sim.AddBody(baseMass, baseSize, 6, GravitySim.BodyStartPosition.StageBottomRight);
                sim.AddBody(baseMass, baseSize, 8, GravitySim.BodyStartPosition.StageBottomLeft);
            }
            else
            {
                sim.AddBody(baseMass, baseSize, 3, GravitySim.BodyStartPosition.StageLeft);
                sim.AddBody(baseMass, baseSize, 2, GravitySim.BodyStartPosition.StageTop);
                sim.AddBody(baseMass, baseSize, 1, GravitySim.BodyStartPosition.StageRight);
                sim.AddBody(baseMass, baseSize, 7, GravitySim.BodyStartPosition.StageBottom);
            }
            sim.AddBody(baseMass, baseSize, 9, GravitySim.BodyStartPosition.CenterOfTheUniverse);
            sim.SetMonitoredBody(4);   // center = 4
            sim.SetMonitoredValues();
            sim.SetCheckSim(false);
            //sim.SetCheckSim(!diagonals); // Sim checking is only implemented for the Cross version
        }
Ejemplo n.º 5
0
        // Use GravitySim.BodyStartPosition.RandomDenseCenterCircularCluster OR GravitySim.BodyStartPosition.RandomUniformDensityCircularCluster
        // sizeFactor 1.0 = tiny, sizeFactor 5.0 = "normal"
        public static void LoadXBodiesCircularCluster(GravitySim sim, int numBodies, double sizeFactor, Renderer.ColorScheme colorScheme, GravitySim.BodyStartPosition bodyStartPosition)
        {
            const double baseMass = 100000.0;

            SetScenarioName(sim, String.Format("{0} Bodies Circular Cluster Scenario ({1})", numBodies, colorScheme));

            Random rand = new Random();

            sim.ClearSim();
            sim.SetSimSpace(new SimulationSpace(SimulationSpace.Space.Toy));

            for (int i = 0; i < numBodies; i++)
            {
                double size = rand.NextDouble() * 3.0 + 1.0;   // Mass as square of size
                sim.AddBody(size * size * baseMass, size * sizeFactor, RandomColor(colorScheme, rand), bodyStartPosition);
            }

            sim.SetMonitoredBody(numBodies - 1);
            sim.SetMonitoredValues();
            sim.SetAccelerationLimits(true, toySpaceScenariosDefaultAccelerationLimit, toySpaceScenariosDeaultMinimumSeparation);
        }