func ExampleEccentricity() { // Example 25.a, p. 165. T := base.J2000Century(julian.CalendarGregorianToJD(1992, 10, 13)) fmt.Printf("%.9f\n", solar.Eccentricity(T)) // Output: // 0.016711668 }
// EclipticAberration returns corrections due to aberration for ecliptic // coordinates of an object. func EclipticAberration(λ, β, jd float64) (Δλ, Δβ float64) { T := base.J2000Century(jd) s, _ := solar.True(T) e := solar.Eccentricity(T) π := perihelion(T) sβ, cβ := math.Sincos(β) ssλ, csλ := math.Sincos(s - λ) sπλ, cπλ := math.Sincos(π - λ) // (23.2) p. 151 Δλ = κ * (e*cπλ - csλ) / cβ Δβ = -κ * sβ * (ssλ - e*sπλ) return }
// EclipticAberration returns corrections due to aberration for ecliptic // coordinates of an object. func EclipticAberration(λ, β unit.Angle, jd float64) (Δλ, Δβ unit.Angle) { T := base.J2000Century(jd) s, _ := solar.True(T) e := solar.Eccentricity(T) π := perihelion(T) sβ, cβ := β.Sincos() ssλ, csλ := (s - λ).Sincos() sπλ, cπλ := (π - λ).Sincos() // (23.2) p. 151 Δλ = κ.Mul((e*cπλ - csλ) / cβ) Δβ = -κ.Mul(sβ * (ssλ - e*sπλ)) return }
// ESmart computes the "equation of time" for the given JDE. // // Result is equation of time as an hour angle. // // Result is less accurate that E() but the function has the advantage // of not requiring the V87Planet object. func ESmart(jde float64) unit.HourAngle { ε := nutation.MeanObliquity(jde) t := ε.Mul(.5).Tan() y := t * t T := base.J2000Century(jde) L0 := l0(T * .1) e := solar.Eccentricity(T) M := solar.MeanAnomaly(T) s2L0, c2L0 := L0.Mul(2).Sincos() sM := M.Sin() // (28.3) p. 185, with double angle identity return unit.HourAngle(y*s2L0 - 2*e*sM + 4*e*y*sM*c2L0 - y*y*s2L0*c2L0 - 1.25*e*e*M.Mul(2).Sin()) }
// ESmart computes the "equation of time" for the given JDE. // // Result is equation of time as an hour angle in radians. // // Result is less accurate that E() but the function has the advantage // of not requiring the V87Planet object. func ESmart(jde float64) float64 { ε := nutation.MeanObliquity(jde) t := math.Tan(ε * .5) y := t * t T := base.J2000Century(jde) L0 := l0(T * .1) e := solar.Eccentricity(T) M := solar.MeanAnomaly(T) s2L0, c2L0 := math.Sincos(2 * L0) sM := math.Sin(M) // (28.3) p. 185 return y*s2L0 - 2*e*sM + 4*e*y*sM*c2L0 - y*y*s2L0*c2L0 - 1.25*e*e*math.Sin(2*M) }
// Aberration returns corrections due to aberration for equatorial // coordinates of an object. func Aberration(α, δ, jd float64) (Δα2, Δδ2 float64) { ε := nutation.MeanObliquity(jd) T := base.J2000Century(jd) s, _ := solar.True(T) e := solar.Eccentricity(T) π := perihelion(T) sα, cα := math.Sincos(α) sδ, cδ := math.Sincos(δ) ss, cs := math.Sincos(s) sπ, cπ := math.Sincos(π) cε := math.Cos(ε) tε := math.Tan(ε) q1 := cα * cε // (23.3) p. 152 Δα2 = κ * (e*(q1*cπ+sα*sπ) - (q1*cs + sα*ss)) / cδ q2 := cε * (tε*cδ - sα*sδ) q3 := cα * sδ Δδ2 = κ * (e*(cπ*q2+sπ*q3) - (cs*q2 + ss*q3)) return }
// Aberration returns corrections due to aberration for equatorial // coordinates of an object. func Aberration(α unit.RA, δ unit.Angle, jd float64) (Δα2 unit.HourAngle, Δδ2 unit.Angle) { ε := nutation.MeanObliquity(jd) T := base.J2000Century(jd) s, _ := solar.True(T) e := solar.Eccentricity(T) π := perihelion(T) sα, cα := α.Sincos() sδ, cδ := δ.Sincos() ss, cs := s.Sincos() sπ, cπ := π.Sincos() cε := ε.Cos() tε := ε.Tan() q1 := cα * cε // (23.3) p. 152 Δα2 = unit.HourAngle(κ.Rad() * (e*(q1*cπ+sα*sπ) - (q1*cs + sα*ss)) / cδ) q2 := cε * (tε*cδ - sα*sδ) q3 := cα * sδ Δδ2 = κ.Mul(e*(cπ*q2+sπ*q3) - (cs*q2 + ss*q3)) return }