Пример #1
0
            public void TestAtmosphereDefaultChemTable()
            {
                var expected = new Dictionary <string, double>()
                {
                    { "Ar", 87534.0399 },
                    { "CO2", 2702.8010 },
                    { "H2O", 1316.9480 },
                    { "Kr", 339.5423 },
                    { "Ne", 65.7954 },
                    { "Xe", 40.8734 },
                    { "NH3", 0.0000 },
                    { "CH4", 0.0000 },
                    { "O3", 0.0000 },
                    { "O", 0.0000 }
                };

                var planet = GetTestPlanetAtmosphere();
                var star   = planet.Star;

                Generator.CalculateGases(planet, ChemType.GetDefaultTable());

                Assert.AreEqual(expected.Count, planet.Atmosphere.Composition.Count);

                foreach (var gas in planet.Atmosphere.Composition)
                {
                    Assert.AreEqual(expected[gas.GasType.symbol], gas.surf_pressure, DELTA);
                }
            }
Пример #2
0
            public void TestNoAtmosphereDefaultChemTable()
            {
                var planet = GetTestPlanetNoAtmosphere();
                var star   = planet.Star;

                Generator.CalculateGases(planet, ChemType.GetDefaultTable());

                Assert.AreEqual(0, planet.Atmosphere.Composition.Count);
            }
Пример #3
0
        public MainGenerator()
        {
            AutoSize      = true;
            AutoScaleMode = AutoScaleMode.Font;
            InitializeComponent();

            _systemMap.PlanetClicked += _systemMap_Click;

            var spriteFile = Path.Combine(Directory.GetCurrentDirectory(), ArtFolder, PlanetsFile);

            _planetSprites = new PlanetSpriteSheet(Image.FromFile(spriteFile), new Point(77, 71), new Size(32, 32), 5,
                                                   5, 6);
            _systemMap.SpriteSheet   = _planetSprites;
            _systemMap.PlanetPadding = 10;
            _gases = ChemType.LoadFromFile(Path.Combine(Directory.GetCurrentDirectory(), "elements.dat"));

            _seedSelector.Value         = 0;
            _eccentricitySelector.Value = 0.25M;
            _gasRatioSelector.Value     = 50;
            _dustDensitySelector.Value  = 0.002M;
            _countSelector.Value        = 100;

            GenerateGroup();
        }
Пример #4
0
        private static void CheckForSpecialRules(out double abund, out double react, double pressure, Planet planet, ChemType gas)
        {
            var sun   = planet.Star;
            var pres2 = 1.0;

            abund = gas.abunds;

            if (gas.symbol == "Ar")
            {
                react = .15 * sun.AgeYears / 4e9;
            }
            else if (gas.symbol == "He")
            {
                abund = abund * (0.001 + (planet.GasMassSM / planet.MassSM));
                pres2 = (0.75 + pressure);
                react = Math.Pow(1 / (1 + gas.reactivity), sun.AgeYears / 2e9 * pres2);
            }
            else if ((gas.symbol == "O" || gas.symbol == "O2") && sun.AgeYears > 2e9 && planet.SurfaceTempKelvin > 270 && planet.SurfaceTempKelvin < 400)
            {
                // pres2 = (0.65 + pressure/2); // Breathable - M: .55-1.4
                pres2 = (0.89 + pressure / 4);  // Breathable - M: .6 -1.8
                react = Math.Pow(1 / (1 + gas.reactivity), Math.Pow(sun.AgeYears / 2e9, 0.25) * pres2);
            }
            else if (gas.symbol == "CO2" && sun.AgeYears > 2e9 && planet.SurfaceTempKelvin > 270 && planet.SurfaceTempKelvin < 400)
            {
                pres2  = (0.75 + pressure);
                react  = Math.Pow(1 / (1 + gas.reactivity), Math.Pow(sun.AgeYears / 2e9, 0.5) * pres2);
                react *= 1.5;
            }
            else
            {
                pres2 = (0.75 + pressure);
                react = Math.Pow(1 / (1 + gas.reactivity), sun.AgeYears / 2e9 * pres2);
            }
        }