public ExponentialNotation GetIntensityAtDistance(Vector3 orbitingObjectPosition)
    {
        //todo convert Vector3 into real distance
        ExponentialNotation actualDistance = ConvertVector3ToAU(orbitingObjectPosition);

        return(IntensityCalculator.IntensityAtDistance(this.IntenstityAtSurface, this.Radius, actualDistance));
    }
    private static ExponentialNotation ConvertUp(ExponentialNotation distanceToConvert, SIUnit desiredMeasurementUnit)
    {
        ExponentialNotation convertedDistance = distanceToConvert;

        while (convertedDistance.MeasurementUnits < desiredMeasurementUnit)
        {
            switch (convertedDistance.MeasurementUnits)
            {
            case SIUnit.AstronomicalUnits:
                convertedDistance = convertedDistance / LightYear_To_AstronomicalUnitsRatio;
                convertedDistance.MeasurementUnits = SIUnit.Lightyears;
                break;

            case SIUnit.Kilometers:
                convertedDistance = convertedDistance / AstronomicalUnit_To_KilometersRatio;
                convertedDistance.MeasurementUnits = SIUnit.AstronomicalUnits;
                break;

            case SIUnit.Meters:
                convertedDistance = convertedDistance / Kilometers_To_MetersRatio;
                convertedDistance.MeasurementUnits = SIUnit.Kilometers;
                break;

            default:
                return(convertedDistance);
            }
        }

        return(convertedDistance);
    }
    public static ExponentialNotation operator *(ExponentialNotation exponentialValue1, ExponentialNotation exponentialValue2)
    {
        var temp = new ExponentialNotation
                   (
            value: exponentialValue1.value * exponentialValue2.value,
            exponent: exponentialValue1.exponent + exponentialValue2.exponent,
            unit: exponentialValue1.MeasurementUnits
                   );

        temp.RecalculateExponents();
        return(temp);
    }
    public static ExponentialNotation operator /(ExponentialNotation exponentialValue, float floatValue)
    {
        var temp = new ExponentialNotation
                   (
            value: exponentialValue.value / floatValue,
            exponent: exponentialValue.exponent,
            unit: exponentialValue.MeasurementUnits
                   );

        temp.RecalculateExponents();
        return(temp);
    }
Example #5
0
    private void CreateNewStellarObject(ExponentialNotation mass, ExponentialNotation radius,
                                        string name, Vector3 startingPosition)
    {
        GameObject newInstance = GameObject.Instantiate(stellarObject_BasePrefab, startingPosition, Quaternion.identity);

        newInstance.name = name;
        StellarObject newStellarObject = newInstance.GetComponentInChildren <StellarObject>();

        newStellarObject.Initialize(mass, radius);

        stellarObjects.Add(newInstance);
    }
    public static ExponentialNotation Convert(ExponentialNotation massToConvert, SIUnit unitToConvertTo)
    {
        ExponentialNotation convertedMass = massToConvert;

        if (massToConvert.MeasurementUnits > unitToConvertTo)
        {
            convertedMass = ConvertDown(massToConvert, unitToConvertTo);
        }
        else if (massToConvert.MeasurementUnits < unitToConvertTo)
        {
            convertedMass = ConvertUp(massToConvert, unitToConvertTo);
        }

        return(convertedMass);
    }
    public static ExponentialNotation Convert(ExponentialNotation distanceToConvert, SIUnit unitToConvertTo)
    {
        ExponentialNotation convertedDistance = distanceToConvert;

        if (distanceToConvert.MeasurementUnits > unitToConvertTo)
        {
            convertedDistance = ConvertDown(distanceToConvert, unitToConvertTo);
        }
        else if (distanceToConvert.MeasurementUnits < unitToConvertTo)
        {
            convertedDistance = ConvertUp(distanceToConvert, unitToConvertTo);
        }

        return(convertedDistance);
    }
    public void Initialize(ExponentialNotation mass, ExponentialNotation radius)
    {
        this.Mass   = mass;
        this.Radius = radius;
        this.IntenstityAtSurface = IntensityCalculator.IntensityAtSurface(this.Mass, this.Radius);

        ExponentialNotation radiusAsAU = DistanceConverter.Convert(this.Radius, SIUnit.AstronomicalUnits);

        float scaledValue = radiusAsAU.GetNormalizedValue();

        this.gameObject.transform.localScale = new Vector3(
            x: scaledValue,
            y: scaledValue,
            z: scaledValue
            );
    }
    /// <summary>
    /// n = distanceFromSource / radiusOfSource
    /// I / (n^2) = Intensity at DistanceFromSource
    /// </summary>
    /// <param name="surfaceIntensity"></param>
    /// <param name="radiusOfSourceObject"></param>
    /// <param name="distanceAwayFromSource"></param>
    /// <returns></returns>
    public static ExponentialNotation IntensityAtDistance(ExponentialNotation surfaceIntensity, ExponentialNotation radiusOfSourceObject, ExponentialNotation distanceAwayFromSource)
    {
        ExponentialNotation intensityAtDistance = null;

        //Convert distances to meters

        //Calculate n: distanceFromSource / radiusOfSource
        ExponentialNotation multipleOfRadius = distanceAwayFromSource / radiusOfSourceObject;

        multipleOfRadius = (multipleOfRadius * multipleOfRadius);
        multipleOfRadius = DistanceConverter.Convert(multipleOfRadius, SIUnit.Meters);

        //Divide Surface Intensity by n^2
        intensityAtDistance = surfaceIntensity / multipleOfRadius;
        intensityAtDistance.MeasurementUnits = SIUnit.MetersCubed_PerSecondsSquared_PerKilograms;
        //I / (n^2)
        return(intensityAtDistance);
    }
    private static ExponentialNotation ConvertUp(ExponentialNotation massToConvert, SIUnit desiredMeasurementUnit)
    {
        ExponentialNotation convertedMass = massToConvert;

        while (convertedMass.MeasurementUnits < desiredMeasurementUnit)
        {
            switch (convertedMass.MeasurementUnits)
            {
            case SIUnit.Kilograms:
                convertedMass = convertedMass / SolarMass_To_KilogramsRatio;
                convertedMass.MeasurementUnits = SIUnit.SolarMasses;
                break;

            default:
                return(convertedMass);
            }
        }

        return(convertedMass);
    }
    /// <summary>
    /// Calculate the Intensity of Gravity at the Surface of the object
    /// I = (G*M)/(r^2)
    /// </summary>
    /// <param name="massOfObject">The mass of the object</param>
    /// <param name="radiusOfObject">The radius of the object</param>
    /// <returns></returns>
    public static ExponentialNotation IntensityAtSurface(ExponentialNotation massOfObject, ExponentialNotation radiusOfObject)
    {
        ExponentialNotation intensity = null;

        //Calculate the numerator: Graviational Constant * Mass (in kg)
        ExponentialNotation massOfObjectInKilograms = MassConverter.Convert(massOfObject, SIUnit.Kilograms);

        intensity = GravitationalConstantOfTheUniverse * massOfObjectInKilograms;

        //Square the radius
        ExponentialNotation radiusOfObjectInMeters = DistanceConverter.Convert(radiusOfObject, SIUnit.Meters);

        radiusOfObjectInMeters = radiusOfObjectInMeters * radiusOfObjectInMeters;

        //Divide the numerator by the radius squared
        intensity = intensity / radiusOfObjectInMeters;
        intensity.MeasurementUnits = SIUnit.MetersCubed_PerSecondsSquared_PerKilograms;
        //I = (G*M)/(r^2)
        return(intensity);
    }
 // Use this for initialization
 void Start()
 {
     this.Mass   = null;
     this.Radius = null;
     this.IntenstityAtSurface = null;
 }