/// <summary> /// Using the inverse square law, with respect to gravity; /// This calculates the intensity of gravity at the surface of the Celesital Object using /// (G * M) / (R^2) /// where: /// G is the universal constant of Gravity; /// M is the mass of the Celestial Object; /// R is the radius of the Celestial Object; /// </summary> private void CalculateIntensityOfGravityAtSurface() { //Convert from Solar Mass to kg, if nessecary ExponentionalValues mass = CheckMassUnits(); /// The gravitational constant of the universe: 6.674 x 10^-11 N *(m^2)/(kg^2) /// (Newton sqaure meters per kilogram squared) ExponentionalValues constantOfGravity = new ExponentionalValues(6.674f, -11, SIUnit.NewtonMetersSquaredPerKGSquared); //Multiply the mass by universal constant of gravity (G*M) ExponentionalValues GravityMassProduct = new ExponentionalValues( constantOfGravity.value * mass.value, constantOfGravity.exponent + mass.exponent, SIUnit.cubicMetersPerSecSquaredPerKG); //Evaluate: (radius)^2 //Convert from Kilometers to Meters, if nessecary ExponentionalValues radius = CheckRadiusUnits(); radius.units = SIUnit.metersSquared; radius.Squared(); //Evaluate: GravityMassProduct / radius ExponentionalValues _surfaceGravity = new ExponentionalValues( (GravityMassProduct.value / radius.value), (GravityMassProduct.exponent - radius.exponent), SIUnit.metersPerSecSquared ); //Acceleration of gravity at the surface in m/s^2 _surfaceGravity.Normalize(); SurfaceGravity = _surfaceGravity; }
public AstronomicalObject(string name, ExponentionalValues mass, ExponentionalValues radius) { Name = name; Mass = mass; Radius = radius; CalculateIntensityOfGravityAtSurface(); }
/// <summary> /// Convert from Kilometers to Meters /// </summary> /// <param name="radiusInKM"></param> /// <returns></returns> public static ExponentionalValues KilometersToMeters(ExponentionalValues radiusInKM) { float meters = radiusInKM.value * 1000; int exponents = radiusInKM.exponent; return(new ExponentionalValues(meters, exponents, SIUnit.m)); }
/// <summary> /// Convert from Solar Mass to Kilograms /// </summary> /// <param name="massInSM"></param> /// <returns></returns> public static ExponentionalValues SolarMassToKG(ExponentionalValues massInSM) { float kg = massInSM.value * _solarToKG; int exponents = massInSM.exponent + 30; return(new ExponentionalValues(kg, exponents, SIUnit.kg)); }
public AstronomicalObject(string[] values) { Name = values[0]; Mass = new ExponentionalValues( float.Parse(values[1]), int.Parse(values[2]), SIUnitConverter.StringToSIUnit(values[3]) ); Radius = new ExponentionalValues( float.Parse(values[4]), int.Parse(values[5]), SIUnitConverter.StringToSIUnit(values[6]) ); CalculateIntensityOfGravityAtSurface(); }
/// <summary> /// Display the corresponding information in the corresponding fields /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void loadedObjectsCombo_SelectedIndexChanged(object sender, EventArgs e) { //Get the selected Astronomical Object _SelectedAstronomicalObject = _AstronomicalObjectData[loadedObjectsCombo.SelectedIndex]; nameTextBox.Text = _SelectedAstronomicalObject.Name; //Mass ExponentionalValues mass = _SelectedAstronomicalObject.Mass; massTextBox.Text = mass.value.ToString(); massExponentTextBox.Text = mass.exponent.ToString(); massUnitsCombo.SelectedItem = (mass.units.Equals(SIUnit.kg)) ? "kilograms" : "Solar Masses"; //Radius ExponentionalValues radius = _SelectedAstronomicalObject.Radius; radiusTextBox.Text = radius.value.ToString(); radiusExponentTextBox.Text = radius.exponent.ToString(); radiusUnitsCombo.SelectedItem = (radius.units.Equals(SIUnit.m)) ? "meters" : "kilometers"; gravityOutputTextBox.Text = _SelectedAstronomicalObject.SurfaceGravityToString(); DisplayDistance(distanceTrackBar.Value); }