Exemplo n.º 1
0
        private radian RotationAtDistance(Distance distance, long massAtCenter)
        {
            // at 147 billion, take 365 days
            var year           = 31557600; // one year in ticks
            var earthOrbitDist = new Distance(147 * BILLION);

            radian earthOrbitSpeed = radian.FromDegree(360.0d / year);

            var distInEarthOrbits = distance / earthOrbitDist;

            var baseStarMass = (5000.0d * MILLION);
            var ratio        = (double)(massAtCenter / baseStarMass);
            var massModifier = Math.Sqrt(ratio);

            double dir = (turnsClockwise) ? 1.0d : -1.0d;

            return(new radian(massModifier * dir * (earthOrbitSpeed.toDouble() / (distInEarthOrbits * distInEarthOrbits))));
        }
Exemplo n.º 2
0
        private Distance GeneratePlanet(Star star, int relativePosition, Distance currentOutermost)
        {
            long      mass = 0;
            Direction startingDirection = Direction.Zero;
            Distance  startingDistance  = Distance.Zero;
            int       numMoons          = 0;

            if (relativePosition < 5)
            {
                mass = rnd.Next(5000, 20000) * THOUSAND;

                numMoons = rnd.Next(1, 2) + rnd.Next(-2, 1);
                if (numMoons < 0)
                {
                    numMoons = 0;
                }
            }
            else
            {
                mass = rnd.Next(100, 200) * MILLION;

                numMoons = rnd.Next(1, 6) + rnd.Next(1, 6) + rnd.Next(1, 6);
            }

            startingDistance = currentOutermost + new Distance(rnd.Next(300, 600) * BILLION);

            startingDirection = Direction.FromCirclePortion(rnd.NextDouble());
            radian rotationPerTick = RotationAtDistance(startingDistance, star.Mass);
            var    planet          = star.AddPlanet("planet" + relativePosition, mass, startingDirection, startingDistance, rotationPerTick);

            var currentOutermostMoon = new Distance(10000 * MILLION);

            for (int n = 0; n < numMoons; n++)
            {
                currentOutermostMoon = GenerateMoon(planet, n, mass, currentOutermostMoon);
            }

            return(startingDistance);
        }
Exemplo n.º 3
0
        public void GenerateAsteroids(int number, string namePrefix, radian orbitSpeed)
        {
            Distance rangeDepth = OuterRange - InnerRange;

            Random rnd = new Random();

            Parallel.For(0, number, n =>
            {
                var ratio = rnd.NextDouble();
                var angle = Direction.FromCirclePortion(rnd.NextDouble());

                var orbitDistance = new Distance(ratio * rangeDepth + InnerRange);

                var asteroid = new Asteroid(
                    name: string.Format("{0}_{1}", namePrefix, n),
                    location: new OrbitLocation(Center, angle, orbitDistance, orbitSpeed),
                    mass: 100000,
                    parent: this);

                AddMember(asteroid);
            });
        }
Exemplo n.º 4
0
        public Planet AddPlanet(string name, long mass, Direction startingDirection, Distance startingDistance, radian rotationPerTick)
        {
            var planet = new Planet(this, name, new OrbitLocation(this, startingDirection, startingDistance, rotationPerTick), mass);

            return(AddPlanet(planet));
        }
Exemplo n.º 5
0
        public Planet AddMoon(string name, long mass, Direction startingDirection, Distance startingDistance, radian rotationPerTick)
        {
            var moon = new Planet(this, name, new OrbitLocation(this, startingDirection, startingDistance, rotationPerTick), mass);

            AddMember(moon);

            return(moon);
        }