コード例 #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();
        }
コード例 #2
0
        public static void LoadLowEarthOrbit(GravitySim sim)
        {
            // To make a braided spiral with ISS trails use calc setting of 2 and then speed up by 800%
            //  4 and 1600% are also interesting

            SetScenarioName(sim, "Low Earth Orbit (ISS + 4 Starlink satellites) Scenario");

            sim.ClearSim();
            SimulationSpace simulationSpace = new SimulationSpace(SimulationSpace.Space.LEO);   // LEO or GEO Space -> Km, minutes, Kg, Km/h

            sim.SetSimSpace(simulationSpace);
            sim.SetCalculationSettings(new CalculationSettings(100, false, false));
            sim.SetSimRounding(0);      // Must remain at zero to have circular orbits

            // === EARTH ===
            sim.AddBodyActual(SolarSystem.EarthMassKg, true, SolarSystem.EarthRadiusKm * 2.0, 3, new SimPoint(0.0, 0.0), new SimPoint(0.0, 0.0));

            //// === ISS ===
            sim.AddBodyActual(0.0, false, sim.simSpace.SmallestBodySizePx * 2.5, 1,
                              new SimPoint(-SolarSystem.ISS_OrbitRadiusKm, 0.0), new SimPoint(0.0, simulationSpace.CircularOrbitVelocity(SolarSystem.EarthMassKg, SolarSystem.ISS_OrbitRadiusKm)));

            // Satellites - Starlink

            // 12 Starlinks
            //double[] startingAngles = { 30.0, 45.0, 60.0, 120.0, 135.0, 150.0, 210.0, 225.0, 240.0, 300.0, 315.0, 330.0 };
            //foreach (double angle in startingAngles)

            // 36 Starlinks
            for (double angle = 0.0; angle < 360.0; angle += 10.0)
            {
                SimPoint position, velocity;
                simulationSpace.InitializeCircularOrbit(angle, SolarSystem.StarlinkOrbitRadiusKm, SolarSystem.EarthMassKg,
                                                        out position, out velocity);
                sim.AddBodyActual(0.0, false, sim.simSpace.SmallestBodySizePx, (int)Renderer.ColorNumber.BodyColorMedGrey,
                                  position, velocity);
            }

            // GPS
            //sim.AddBodyActual(0.0, false, sim.simSpace.SmallestBodySizePx * 5.0, 4,
            //    new SimPoint(-SolarSystem.GPS_OrbitRadiusKm, 0.0), new SimPoint(0.0, simulationSpace.CircularOrbitVelocity(SolarSystem.EarthMassKg, SolarSystem.GPS_OrbitRadiusKm)));

            // Geosynchronus orbit
            //sim.AddBodyActual(0.0, false, sim.simSpace.SmallestBodySizePx * 2.0, 5,
            //    new SimPoint(-SolarSystem.GeosynchronousOrbitRadiusKm, 0.0), new SimPoint(0.0, simulationSpace.CircularOrbitVelocity(SolarSystem.EarthMassKg, SolarSystem.GeosynchronousOrbitRadiusKm)));

            sim.SetMonitoredBody(1);
            sim.SetMonitoredValues();
            sim.SetAccelerationLimits(false, 0.0, 0.0);
        }
コード例 #3
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
        }