public static double FirstSpaceVelocity(IAstronomicalObject bigObj, IAstronomicalObject smallObj) { var distance = bigObj.Distance(smallObj); var firstSpeed = Math.Sqrt(GravitationalConstant * bigObj.Mass / distance); return(firstSpeed); }
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>()); }
public static double AttractivePower(IAstronomicalObject obj1, IAstronomicalObject obj2) { var length = obj1.Distance(obj2); var power = GravitationalConstant * (obj1.Mass / length) * (obj2.Mass / length); return(power); }
/// <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); }
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); }
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); }
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); }
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); }
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(); }
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"); }
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)); }
public double Distance(IAstronomicalObject obj) => Position.Distance(obj.Position);
private string GetDistanceInKilometers(IAstronomicalObject obj1, IAstronomicalObject obj2) { return((obj1.Distance(obj2) / 1E6).ToString("# ###")); }
public static double SecondSpaceVelocity(IAstronomicalObject bigObj, IAstronomicalObject smallObj) { var secondSpeed = Math.Sqrt(2) * FirstSpaceVelocity(bigObj, smallObj); return(secondSpeed); }