Exemple #1
0
        public static double FirstSpaceVelocity(IAstronomicalObject bigObj, IAstronomicalObject smallObj)
        {
            var distance   = bigObj.Distance(smallObj);
            var firstSpeed = Math.Sqrt(GravitationalConstant * bigObj.Mass / distance);

            return(firstSpeed);
        }
Exemple #2
0
        private void Initialize()
        {
            var scaleLength = (double)nUD_Length.Value;

            var Earth = new AstronomicalObject
                        (
                name: "Земля",
                mass: 5.9726E24,
                radius: 6.371E6,
                position: new Position(4E8, 4E8),
                speedVector: new Vector(0, -12.6)
                        );
            var Moon = new AstronomicalObject
                       (
                name: "Місяць",
                mass: 7.3477E22,
                radius: 1.737E6,
                position: new Position(7.84467E8, 4E8),
                speedVector: new Vector(0, 1023)
                       );

            _mainObject = Earth;
            _canvas     = new Canvas(pb_Universe.Width, pb_Universe.Height);
            _canvas.AddObject(Earth);
            _canvas.AddObject(Moon);
            _canvas.InProcessObject = GetObjectFromFields();
            _canvas.Scale.Length    = scaleLength;
            _canvas.Scale.Time      = (int)(nUD_Time.Value / framesPerSecond);
            FillInForm();
        }
 public void AddBody(IAstronomicalObject obj)
 {
     if (obj != null)
     {
         Bodies.Add(obj);
     }
 }
 public static List <Region> getSolarSystemEditorData(IAstronomicalObject astroObject)
 {
     /*string path = Application.dataPath + "/Scripts/SolarSystemEditor.txt";
      * var file = File.ReadAllLines(path);
      * print(file[4].Split(',')[0].Remove(' '));*/
     return(new List <Region>());
 }
Exemple #5
0
        public static double AttractivePower(IAstronomicalObject obj1, IAstronomicalObject obj2)
        {
            var length = obj1.Distance(obj2);
            var power  = GravitationalConstant * (obj1.Mass / length) * (obj2.Mass / length);

            return(power);
        }
Exemple #6
0
        /// <param name="initialPosition">The position the rover has landed at</param>
        /// <param name="astronomicalObject">The body on which the rover has landed</param>
        public Rover(Position landingPosition, IAstronomicalObject astronomicalObject)
        {
            currentPosition         = landingPosition;
            this.astronomicalObject = astronomicalObject;

            previousPosition = default;
        }
        private void Collison(IAstronomicalObject obj1, IAstronomicalObject obj2)
        {
            var after = CollisonProcess.Run(obj1, obj2);

            Bodies.Remove(obj1);
            Bodies.Remove(obj2);
            Bodies.AddRange(after);
        }
 public void RemoveBody(IAstronomicalObject obj)
 {
     if (obj == null)
     {
         return;
     }
     Bodies.Remove(obj);
 }
Exemple #9
0
        public static Vector NormalVectorFromFirstToSecondBody(IAstronomicalObject obj1, IAstronomicalObject obj2)
        {
            var dx     = obj2.Position.X - obj1.Position.X;
            var dy     = obj2.Position.Y - obj1.Position.Y;
            var length = obj1.Distance(obj2);
            var nv     = new Vector(dx / length, dy / length);

            return(nv);
        }
Exemple #10
0
 public List <IAstronomicalObject> Run(IAstronomicalObject obj1, IAstronomicalObject obj2)
 {
     return((obj1.Mass > obj2.Mass)
         ? new List <IAstronomicalObject> {
         obj1
     }
         : new List <IAstronomicalObject> {
         obj2
     });
 }
        private void SetLastColision(IAstronomicalObject obj1, IAstronomicalObject obj2)
        {
            var distance = obj1.Distance(obj2);
            var normal   = Gravity.NormalVectorFromFirstToSecondBody(obj2, obj1);
            var distanceToIntersection = (Math.Sqrt(obj2.Radius) + Math.Sqrt(distance) - Math.Sqrt(obj1.Radius)) / (2 * distance);
            var shiftToIntersection    = normal * distanceToIntersection;

            LastCollision = obj2.Position.Clone();
            LastCollision.Shift(shiftToIntersection.X, shiftToIntersection.Y);
        }
Exemple #12
0
        public static void ChangeAccelerationVectors(IAstronomicalObject obj1, IAstronomicalObject obj2)
        {
            var normalVector = NormalVectorFromFirstToSecondBody(obj1, obj2);
            var length       = obj1.Distance(obj2);
            var lengthSquare = length * length;
            var power1       = GravitationalConstant * obj2.Mass / lengthSquare;
            var power2       = -GravitationalConstant * obj1.Mass / lengthSquare;

            obj1.SpeedVector.Add(power1 * normalVector);
            obj2.SpeedVector.Add(power2 * normalVector);
        }
Exemple #13
0
        public static bool IsAbandoned(IAstronomicalObject bigObj, IAstronomicalObject smallObj)
        {
            var vectorToBigObj = new Vector(bigObj.Position.X - smallObj.Position.X, bigObj.Position.Y - smallObj.Position.Y);
            var cosine         = vectorToBigObj.Cosine(smallObj.SpeedVector);

            if (cosine > 0)
            {
                return(false);
            }
            var secondSpeed = SecondSpaceVelocity(bigObj, smallObj);

            return(smallObj.SpeedVector.Length >= secondSpeed);
        }
    public IAstronomicalObject[] generateSolarSystem()
    {
        GameObject inGameEarth = Instantiate(planetEarth, earthPosition, Quaternion.identity);

        inGameEarth.AddComponent <AstronomicalObject>();
        IAstronomicalObject EarthData = inGameEarth.GetComponent <AstronomicalObject>();

        //Move this to a text file later for mod compatability (more regions mod e.t.c)
        EarthData.regions = new List <IRegion> {
            new Region("Europe"),
            new Region("China"),
            new Region("Russia"),
            new Region("USA"),
        };
        EarthData.Name = "Earth";



        GameObject inGameMoon = Instantiate(earthsMoon, moonPosition, Quaternion.identity);

        inGameMoon.AddComponent <AstronomicalObject>();
        IAstronomicalObject MoonData = inGameMoon.GetComponent <AstronomicalObject>();

        MoonData.regions = new List <IRegion> {
            new Region("The Front Side"),
            new Region("The Back Side")
        };

        //TODO: Obviously make the solar system creator better
        MoonData.regions[0].refineries = 0;
        MoonData.regions[1].refineries = 0;
        MoonData.regions[0].fuel       = 0;
        MoonData.regions[1].fuel       = 0;
        MoonData.Name = "Moon";

        GameObject inGameSun = Instantiate(Sun, sunPosition, Quaternion.identity);

        inGameSun.AddComponent <AstronomicalObject>();
        IAstronomicalObject SunData = inGameSun.GetComponent <AstronomicalObject>();

        SunData.Name = "Sun";

        IAstronomicalObject[] output = { EarthData, MoonData, SunData };

        List <Region> lol = getSolarSystemEditorData(EarthData);

        return(output);
    }
Exemple #15
0
        private void btn_AddBody_Click(object sender, EventArgs e)
        {
            IAstronomicalObject Asteroid = _canvas.InProcessObject;
            var density = Asteroid.GetDensity();

            if (!Validation(Asteroid))
            {
                var result = MessageBox.Show(
                    validationWarning + $"\n\nСтворити астероїд з щільністю {density.ToString("# ##0.0##")} г/см³?\nЩоб продовжити редагування оберіть <Нет>.", "Попередження", MessageBoxButtons.YesNo);
                if (result == DialogResult.No)
                {
                    return;
                }
            }
            _canvas.AddInProcessObject();
            FillInForm();
        }
Exemple #16
0
 private string GetObjectInfo(IAstronomicalObject obj)
 {
     return($"{obj.Name}, R {(obj.Radius / 1000).ToString("# ##0.#")} км, ρ {obj.GetDensity().ToString("0.00")} г/cм³:\n" +
            $"   - швидкість    {GetSpeedInKilometersPerSecond(obj.SpeedVector.Length)} км/с\n" +
            $"   - відстань {GetDistanceInKilometers(_mainObject, obj)} т.км\n");
 }
Exemple #17
0
 public bool Validation(IAstronomicalObject obj) => obj.GetDensity() >= minDensity && obj.GetDensity() <= maxDensity;
        public bool CheckCollision(IAstronomicalObject obj1, IAstronomicalObject obj2)
        {
            var distance = obj1.Distance(obj2);

            return(distance < (obj1.Radius + obj2.Radius));
        }
Exemple #19
0
 public double Distance(IAstronomicalObject obj) => Position.Distance(obj.Position);
Exemple #20
0
 private string GetDistanceInKilometers(IAstronomicalObject obj1, IAstronomicalObject obj2)
 {
     return((obj1.Distance(obj2) / 1E6).ToString("# ###"));
 }
Exemple #21
0
        public static double SecondSpaceVelocity(IAstronomicalObject bigObj, IAstronomicalObject smallObj)
        {
            var secondSpeed = Math.Sqrt(2) * FirstSpaceVelocity(bigObj, smallObj);

            return(secondSpeed);
        }