Skip to content

Commit

Permalink
Merge pull request #32 from jfcarr-astronomy/moon/dist-ad-hp
Browse files Browse the repository at this point in the history
Calculate -> Moon's distance, angular diameter, and horizontal parallax
  • Loading branch information
Jim Carr committed Dec 9, 2020
2 parents 36ec8b6 + 3bbbf75 commit 4ccb464
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 1 deletion.
6 changes: 6 additions & 0 deletions PALib.Tests/PAMoon.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,11 @@ public void TimesOfNewMoonAndFullMoon()
{
Assert.Equal((17, 27, 27, 8, 2003, 16, 36, 10, 9, 2003), _paMoon.TimesOfNewMoonAndFullMoon(false, 0, 1, 9, 2003));
}

[Fact]
public void MoonDistAngDiamHorParallax()
{
Assert.Equal((367964, 0, 32, 0, 59, 35.49), _paMoon.MoonDistAngDiamHorParallax(0, 0, 0, false, 0, 1, 9, 2003));
}
}
}
47 changes: 47 additions & 0 deletions PALib/PAMacros.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1762,6 +1762,53 @@ public static double MoonHP(double lh, double lm, double ls, int ds, int zc, dou
return pm;
}

/// <summary>
/// Calculate distance from the Earth to the Moon (km)
/// </summary>
/// <remarks>
/// Original macro name: MoonDist
/// </remarks>
/// <param name="lh"></param>
/// <param name="lm"></param>
/// <param name="ls"></param>
/// <param name="ds"></param>
/// <param name="zc"></param>
/// <param name="dy"></param>
/// <param name="mn"></param>
/// <param name="yr"></param>
/// <returns></returns>
public static double MoonDist(double lh, double lm, double ls, int ds, int zc, double dy, int mn, int yr)
{
var hp = (MoonHP(lh, lm, ls, ds, zc, dy, mn, yr)).ToRadians();
var r = 6378.14 / hp.Sine();

return r;
}

/// <summary>
/// Calculate the Moon's angular diameter (degrees)
/// </summary>
/// <remarks>
/// Original macro name: MoonSize
/// </remarks>
/// <param name="lh"></param>
/// <param name="lm"></param>
/// <param name="ls"></param>
/// <param name="ds"></param>
/// <param name="zc"></param>
/// <param name="dy"></param>
/// <param name="mn"></param>
/// <param name="yr"></param>
/// <returns></returns>
public static double MoonSize(double lh, double lm, double ls, int ds, int zc, double dy, int mn, int yr)
{
var hp = (MoonHP(lh, lm, ls, ds, zc, dy, mn, yr)).ToRadians();
var r = 6378.14 / hp.Sine();
var th = 384401.0 * 0.5181 / r;

return th;
}

/// <summary>
/// Convert angle in radians to equivalent angle in degrees.
/// </summary>
Expand Down
37 changes: 37 additions & 0 deletions PALib/PAMoon.cs
Original file line number Diff line number Diff line change
Expand Up @@ -236,5 +236,42 @@ public class PAMoon

return (nmLocalTimeHour, nmLocalTimeMin, nmLocalDateDay, nmLocalDateMonth, nmLocalDateYear, fmLocalTimeHour, fmLocalTimeMin, fmLocalDateDay, fmLocalDateMonth, fmLocalDateYear);
}

/// <summary>
/// Calculate Moon's distance, angular diameter, and horizontal parallax.
/// </summary>
/// <param name="lctHour"></param>
/// <param name="lctMin"></param>
/// <param name="lctSec"></param>
/// <param name="isDaylightSaving"></param>
/// <param name="zoneCorrectionHours"></param>
/// <param name="localDateDay"></param>
/// <param name="localDateMonth"></param>
/// <param name="localDateYear"></param>
/// <returns>
/// <para>earth_moon_dist -- Earth-Moon distance (km)</para>
/// <para>ang_diameter_deg -- Angular diameter (degrees part)</para>
/// <para>ang_diameter_min -- Angular diameter (minutes part)</para>
/// <para>hor_parallax_deg -- Horizontal parallax (degrees part)</para>
/// <para>hor_parallax_min -- Horizontal parallax (minutes part)</para>
/// <para>hor_parallax_sec -- Horizontal parallax (seconds part)</para>
/// </returns>
public (double earthMoonDist, double angDiameterDeg, double angDiameterMin, double horParallaxDeg, double horParallaxMin, double horParallaxSec) MoonDistAngDiamHorParallax(double lctHour, double lctMin, double lctSec, bool isDaylightSaving, int zoneCorrectionHours, double localDateDay, int localDateMonth, int localDateYear)
{
var daylightSaving = (isDaylightSaving) ? 1 : 0;

var moonDistance = PAMacros.MoonDist(lctHour, lctMin, lctSec, daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
var moonAngularDiameter = PAMacros.MoonSize(lctHour, lctMin, lctSec, daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
var moonHorizontalParallax = PAMacros.MoonHP(lctHour, lctMin, lctSec, daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);

var earthMoonDist = Math.Round(moonDistance, 0);
var angDiameterDeg = PAMacros.DecimalDegreesDegrees(moonAngularDiameter + 0.008333);
var angDiameterMin = PAMacros.DecimalDegreesMinutes(moonAngularDiameter + 0.008333);
var horParallaxDeg = PAMacros.DecimalDegreesDegrees(moonHorizontalParallax);
var horParallaxMin = PAMacros.DecimalDegreesMinutes(moonHorizontalParallax);
var horParallaxSec = PAMacros.DecimalDegreesSeconds(moonHorizontalParallax);

return (earthMoonDist, angDiameterDeg, angDiameterMin, horParallaxDeg, horParallaxMin, horParallaxSec);
}
}
}
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ If you're interested in this topic, please buy the book! It provides far more de
- [x] Calculate -> Approximate and precise position of Moon
- [x] Calculate -> Moon phase and position angle of bright limb
- [x] Calculate -> Times of new Moon and full Moon
- [ ] Calculate -> Moon's distance, angular diameter, and horizontal parallax
- [x] Calculate -> Moon's distance, angular diameter, and horizontal parallax
- [ ] Calculate -> Local moonrise and moonset

### Eclipses
Expand Down

0 comments on commit 4ccb464

Please sign in to comment.