From f048a669a32e459c437610d00a3be40096a66440 Mon Sep 17 00:00:00 2001 From: Michael Roberts Date: Mon, 21 Feb 2022 15:13:22 +0000 Subject: [PATCH] feat: Added ConvertEclipticCoordinateToEquatorial() to dusk module. feat: Added ConvertEclipticCoordinateToEquatorial() to dusk module. Includes associated test suite for module export definition and expected output. --- coverage.txt | 45 +++++++++++++++++++----------------- pkg/dusk/coordinates.go | 41 ++++++++++++++++++++++++++++++++ pkg/dusk/coordinates_test.go | 31 +++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 21 deletions(-) diff --git a/coverage.txt b/coverage.txt index 4537657..9278158 100644 --- a/coverage.txt +++ b/coverage.txt @@ -1,8 +1,17 @@ mode: atomic -github.com/observerly/dusk/pkg/dusk/epoch.go:31.48,36.2 2 60 +github.com/observerly/dusk/pkg/dusk/utils.go:15.34,17.2 1 5 +github.com/observerly/dusk/pkg/dusk/utils.go:26.55,31.12 2 6 +github.com/observerly/dusk/pkg/dusk/utils.go:35.2,35.11 1 6 +github.com/observerly/dusk/pkg/dusk/utils.go:31.12,33.3 1 0 +github.com/observerly/dusk/pkg/dusk/utils.go:47.84,49.2 1 4 +github.com/observerly/dusk/pkg/dusk/utils.go:60.84,62.2 1 6 +github.com/observerly/dusk/pkg/dusk/coordinates.go:26.108,45.12 10 2 +github.com/observerly/dusk/pkg/dusk/coordinates.go:49.2,52.3 1 2 +github.com/observerly/dusk/pkg/dusk/coordinates.go:45.12,47.3 1 2 +github.com/observerly/dusk/pkg/dusk/epoch.go:31.48,36.2 2 62 github.com/observerly/dusk/pkg/dusk/epoch.go:43.45,45.2 1 70 github.com/observerly/dusk/pkg/dusk/epoch.go:53.65,64.2 4 31 -github.com/observerly/dusk/pkg/dusk/epoch.go:72.73,80.2 3 21 +github.com/observerly/dusk/pkg/dusk/epoch.go:72.73,80.2 3 23 github.com/observerly/dusk/pkg/dusk/epoch.go:89.62,100.2 3 6 github.com/observerly/dusk/pkg/dusk/epoch.go:108.73,121.12 5 4 github.com/observerly/dusk/pkg/dusk/epoch.go:125.2,125.11 1 4 @@ -11,9 +20,9 @@ github.com/observerly/dusk/pkg/dusk/epoch.go:134.77,156.12 10 3 github.com/observerly/dusk/pkg/dusk/epoch.go:160.2,160.11 1 3 github.com/observerly/dusk/pkg/dusk/epoch.go:156.12,158.3 1 0 github.com/observerly/dusk/pkg/dusk/epoch.go:170.70,175.2 2 30 -github.com/observerly/dusk/pkg/dusk/lunar.go:15.47,20.11 2 13 -github.com/observerly/dusk/pkg/dusk/lunar.go:24.2,24.10 1 13 -github.com/observerly/dusk/pkg/dusk/lunar.go:20.11,22.3 1 10 +github.com/observerly/dusk/pkg/dusk/lunar.go:15.47,20.11 2 15 +github.com/observerly/dusk/pkg/dusk/lunar.go:24.2,24.10 1 15 +github.com/observerly/dusk/pkg/dusk/lunar.go:20.11,22.3 1 12 github.com/observerly/dusk/pkg/dusk/lunar.go:34.48,39.11 2 1 github.com/observerly/dusk/pkg/dusk/lunar.go:43.2,43.10 1 1 github.com/observerly/dusk/pkg/dusk/lunar.go:39.11,41.3 1 1 @@ -29,8 +38,8 @@ github.com/observerly/dusk/pkg/dusk/lunar.go:96.11,98.3 1 0 github.com/observerly/dusk/pkg/dusk/lunar.go:109.52,114.11 2 5 github.com/observerly/dusk/pkg/dusk/lunar.go:118.2,118.10 1 5 github.com/observerly/dusk/pkg/dusk/lunar.go:114.11,116.3 1 2 -github.com/observerly/dusk/pkg/dusk/lunar.go:128.61,133.12 2 8 -github.com/observerly/dusk/pkg/dusk/lunar.go:137.2,137.11 1 8 +github.com/observerly/dusk/pkg/dusk/lunar.go:128.61,133.12 2 10 +github.com/observerly/dusk/pkg/dusk/lunar.go:137.2,137.11 1 10 github.com/observerly/dusk/pkg/dusk/lunar.go:133.12,135.3 1 0 github.com/observerly/dusk/pkg/dusk/lunar.go:149.76,151.2 1 1 github.com/observerly/dusk/pkg/dusk/lunar.go:162.76,164.2 1 1 @@ -44,18 +53,18 @@ github.com/observerly/dusk/pkg/dusk/solar.go:33.50,36.2 1 28 github.com/observerly/dusk/pkg/dusk/solar.go:45.62,48.2 1 27 github.com/observerly/dusk/pkg/dusk/solar.go:58.74,60.2 1 24 github.com/observerly/dusk/pkg/dusk/solar.go:71.46,73.2 1 25 -github.com/observerly/dusk/pkg/dusk/solar.go:81.47,86.11 2 8 -github.com/observerly/dusk/pkg/dusk/solar.go:90.2,90.10 1 8 -github.com/observerly/dusk/pkg/dusk/solar.go:86.11,88.3 1 8 +github.com/observerly/dusk/pkg/dusk/solar.go:81.47,86.11 2 10 +github.com/observerly/dusk/pkg/dusk/solar.go:90.2,90.10 1 10 +github.com/observerly/dusk/pkg/dusk/solar.go:86.11,88.3 1 10 github.com/observerly/dusk/pkg/dusk/solar.go:106.110,112.2 2 24 github.com/observerly/dusk/pkg/dusk/solar.go:123.142,151.2 12 23 -github.com/observerly/dusk/pkg/dusk/trigonometry.go:10.30,12.2 1 308 -github.com/observerly/dusk/pkg/dusk/trigonometry.go:14.30,16.2 1 90 +github.com/observerly/dusk/pkg/dusk/trigonometry.go:10.30,12.2 1 318 +github.com/observerly/dusk/pkg/dusk/trigonometry.go:14.30,16.2 1 106 github.com/observerly/dusk/pkg/dusk/trigonometry.go:18.44,20.2 1 1 -github.com/observerly/dusk/pkg/dusk/trigonometry.go:22.30,24.2 1 5 -github.com/observerly/dusk/pkg/dusk/trigonometry.go:26.31,28.2 1 30 +github.com/observerly/dusk/pkg/dusk/trigonometry.go:22.30,24.2 1 7 +github.com/observerly/dusk/pkg/dusk/trigonometry.go:26.31,28.2 1 32 github.com/observerly/dusk/pkg/dusk/trigonometry.go:30.31,32.2 1 26 -github.com/observerly/dusk/pkg/dusk/trigonometry.go:34.31,36.2 1 1 +github.com/observerly/dusk/pkg/dusk/trigonometry.go:34.31,36.2 1 3 github.com/observerly/dusk/pkg/dusk/trigonometry.go:38.36,40.2 1 5 github.com/observerly/dusk/pkg/dusk/twilight.go:38.163,49.16 5 9 github.com/observerly/dusk/pkg/dusk/twilight.go:53.2,57.18 1 9 @@ -63,9 +72,3 @@ github.com/observerly/dusk/pkg/dusk/twilight.go:49.16,51.3 1 0 github.com/observerly/dusk/pkg/dusk/twilight.go:69.139,74.2 2 3 github.com/observerly/dusk/pkg/dusk/twilight.go:85.142,90.2 2 3 github.com/observerly/dusk/pkg/dusk/twilight.go:101.146,106.2 2 3 -github.com/observerly/dusk/pkg/dusk/utils.go:15.34,17.2 1 5 -github.com/observerly/dusk/pkg/dusk/utils.go:26.55,31.12 2 4 -github.com/observerly/dusk/pkg/dusk/utils.go:35.2,35.11 1 4 -github.com/observerly/dusk/pkg/dusk/utils.go:31.12,33.3 1 0 -github.com/observerly/dusk/pkg/dusk/utils.go:47.84,49.2 1 4 -github.com/observerly/dusk/pkg/dusk/utils.go:60.84,62.2 1 4 diff --git a/pkg/dusk/coordinates.go b/pkg/dusk/coordinates.go index 814373b..e1b16c6 100644 --- a/pkg/dusk/coordinates.go +++ b/pkg/dusk/coordinates.go @@ -1,5 +1,9 @@ package dusk +import ( + "time" +) + type EquatorialCoordinate struct { ra float64 dec float64 @@ -10,3 +14,40 @@ type EclipticCoordinate struct { β float64 Δ float64 } + +/* + ConvertEclipticCoordinateToEquatorial() + + @param datetime - the datetime of the observer (in UTC) + @param geocentric ecliptic coordinate of type EclipticCoordinate { λ, β, Λ } + @returns the converted equatorial coordinate { ra, dec } + @see eq13.3 & eq13.4 p.93 of Meeus, Jean. 1991. Astronomical algorithms. Richmond, Va: Willmann-Bell. +*/ +func ConvertEclipticCoordinateToEquatorial(datetime time.Time, ec EclipticCoordinate) EquatorialCoordinate { + var J = GetCurrentJulianCenturyRelativeToJ2000(datetime) + + var L float64 = GetSolarMeanLongitude(J) + + var l float64 = GetLunarMeanLongitude(J) + + var Ω float64 = GetLunarLongitudeOfTheAscendingNode(J) + + var ε float64 = GetMeanObliquityOfTheEcliptic(J) + GetNutationInObliquityOfTheEcliptic(L, l, Ω) + + var λ = ec.λ + + var β = ec.β + + var α = atanx((sinx(λ)*cosx(ε) - tanx(β)*sinx(ε)) / cosx(λ)) + + var δ = asinx(sinx(β)*cosx(ε) + cosx(β)*sinx(ε)*sinx(λ)) + + if α < 0 { + α += 180 + } + + return EquatorialCoordinate{ + ra: α, + dec: δ, + } +} diff --git a/pkg/dusk/coordinates_test.go b/pkg/dusk/coordinates_test.go index 5f26471..edec340 100644 --- a/pkg/dusk/coordinates_test.go +++ b/pkg/dusk/coordinates_test.go @@ -1 +1,32 @@ package dusk + +import ( + "math" + "testing" +) + +func TestConvertEclipticCoordinateToEquatorialRA(t *testing.T) { + // utilising the ecliptic position of the moon on the datetime provided: + var ec EquatorialCoordinate = ConvertEclipticCoordinateToEquatorial(d, EclipticCoordinate{λ: 133.162655, β: -3.229126, Δ: 0}) + + var got float64 = ec.ra + + var want float64 = 134.688470 + + if math.Abs(got-want) > 0.15 { + t.Errorf("got %f, wanted %f", got, want) + } +} + +func TestConvertEclipticCoordinateToEquatorialDec(t *testing.T) { + // utilising the ecliptic position of the moon on the datetime provided: + var ec EquatorialCoordinate = ConvertEclipticCoordinateToEquatorial(d, EclipticCoordinate{λ: 133.162655, β: -3.229126, Δ: 0}) + + var got float64 = ec.dec + + var want float64 = 13.768368 + + if math.Abs(got-want) > 0.15 { + t.Errorf("got %f, wanted %f", got, want) + } +}