diff --git a/coverage.txt b/coverage.txt index 77d20d1..9278158 100644 --- a/coverage.txt +++ b/coverage.txt @@ -1,34 +1,13 @@ mode: atomic -github.com/observerly/dusk/pkg/dusk/solar.go:21.45,24.2 1 31 -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: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 446 -github.com/observerly/dusk/pkg/dusk/trigonometry.go:14.30,16.2 1 90 -github.com/observerly/dusk/pkg/dusk/trigonometry.go:18.44,20.2 1 121 -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: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: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 -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: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 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 @@ -44,39 +23,52 @@ 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 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 3 -github.com/observerly/dusk/pkg/dusk/lunar.go:43.2,43.10 1 3 -github.com/observerly/dusk/pkg/dusk/lunar.go:39.11,41.3 1 3 -github.com/observerly/dusk/pkg/dusk/lunar.go:53.45,58.11 2 8 -github.com/observerly/dusk/pkg/dusk/lunar.go:62.2,62.10 1 8 -github.com/observerly/dusk/pkg/dusk/lunar.go:58.11,60.3 1 5 -github.com/observerly/dusk/pkg/dusk/lunar.go:72.52,77.11 2 8 -github.com/observerly/dusk/pkg/dusk/lunar.go:81.2,81.10 1 8 -github.com/observerly/dusk/pkg/dusk/lunar.go:77.11,79.3 1 5 +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 +github.com/observerly/dusk/pkg/dusk/lunar.go:53.45,58.11 2 6 +github.com/observerly/dusk/pkg/dusk/lunar.go:62.2,62.10 1 6 +github.com/observerly/dusk/pkg/dusk/lunar.go:58.11,60.3 1 3 +github.com/observerly/dusk/pkg/dusk/lunar.go:72.52,77.11 2 6 +github.com/observerly/dusk/pkg/dusk/lunar.go:81.2,81.10 1 6 +github.com/observerly/dusk/pkg/dusk/lunar.go:77.11,79.3 1 3 github.com/observerly/dusk/pkg/dusk/lunar.go:91.64,96.11 2 5 github.com/observerly/dusk/pkg/dusk/lunar.go:100.2,100.10 1 5 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 github.com/observerly/dusk/pkg/dusk/lunar.go:172.74,197.2 10 4 -github.com/observerly/dusk/pkg/dusk/lunar.go:207.70,236.20 15 2 -github.com/observerly/dusk/pkg/dusk/lunar.go:254.2,254.20 1 2 -github.com/observerly/dusk/pkg/dusk/lunar.go:269.2,273.3 1 2 -github.com/observerly/dusk/pkg/dusk/lunar.go:236.20,241.14 3 120 -github.com/observerly/dusk/pkg/dusk/lunar.go:242.10,244.21 2 64 -github.com/observerly/dusk/pkg/dusk/lunar.go:245.14,247.25 2 44 -github.com/observerly/dusk/pkg/dusk/lunar.go:248.14,250.26 2 12 -github.com/observerly/dusk/pkg/dusk/lunar.go:254.20,259.14 3 120 -github.com/observerly/dusk/pkg/dusk/lunar.go:260.10,261.21 1 68 -github.com/observerly/dusk/pkg/dusk/lunar.go:262.14,263.25 1 48 -github.com/observerly/dusk/pkg/dusk/lunar.go:264.14,265.26 1 4 -github.com/observerly/dusk/pkg/dusk/lunar.go:447.81,453.2 2 1 -github.com/observerly/dusk/pkg/dusk/lunar.go:465.103,474.11 4 1 -github.com/observerly/dusk/pkg/dusk/lunar.go:479.2,479.14 1 1 -github.com/observerly/dusk/pkg/dusk/lunar.go:474.11,476.3 1 1 +github.com/observerly/dusk/pkg/dusk/lunar.go:211.81,217.2 2 1 +github.com/observerly/dusk/pkg/dusk/lunar.go:229.103,238.11 4 1 +github.com/observerly/dusk/pkg/dusk/lunar.go:243.2,243.14 1 1 +github.com/observerly/dusk/pkg/dusk/lunar.go:238.11,240.3 1 1 +github.com/observerly/dusk/pkg/dusk/solar.go:21.45,24.2 1 29 +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 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 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 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 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 +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 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) + } +}