示例#1
0
        /// <summary>
        ///     Compute solar time for given julian date, time fraction, angle, latitude and direction.
        /// </summary>
        /// <param name="julianDate">
        ///     Julian date of solar time to be computed.
        /// </param>
        /// <param name="timeFraction">
        ///     Time fraction of the day of solar time to be computed.
        /// </param>
        /// <param name="angle">
        ///     Sun's angle of solar time to be computed.
        /// </param>
        /// <param name="latitude">
        ///     Location's latitude.
        /// </param>
        /// <param name="direction">
        ///     <see cref="Direction" /> value which determine whether sun is before or after mid day.
        /// </param>
        /// <returns>
        ///     Solar time for given julian date, time fraction, angle, latitude and direction.
        /// </returns>
        internal static double ComputeSolarTime(double julianDate, double timeFraction, double angle, double latitude, Direction direction)
        {
            var sunDeclination = ComputeSunDeclination(julianDate + timeFraction);
            var midDay         = ComputeMidDay(julianDate, timeFraction);

            var solarTime = 0.0666666666666667 *
                            AngleMath.InverseCosineInDegree((-AngleMath.SineOfDegree(angle) -
                                                             (AngleMath.SineOfDegree(sunDeclination) * AngleMath.SineOfDegree(latitude))) /
                                                            (AngleMath.CosineOfDegree(sunDeclination) * AngleMath.CosineOfDegree(latitude)));

            return(midDay + (direction == Direction.CounterClockwise ? -solarTime : solarTime));
        }
示例#2
0
 /// <summary>
 ///     Compute sun's right ascension for given mean obliquity and ecliptic longitude.
 /// </summary>
 private static double ComputeSunRightAscension(double eclipticMeanObliquity, double sunEclipticLongitude)
 {
     return(AngleMath.InverseTangent2InDegree(AngleMath.CosineOfDegree(eclipticMeanObliquity) * AngleMath.SineOfDegree(sunEclipticLongitude),
                                              AngleMath.CosineOfDegree(sunEclipticLongitude)) /
            15.0);
 }