module Data.Astro.Effects
(
refract
, Precession.AstronomyEpoch(..)
, Precession.precession1
, Precession.precession2
, Nutation.nutationLongitude
, Nutation.nutationObliquity
, Aberration.includeAberration
, Parallax.parallax
)
where
import Data.Astro.Types (DecimalDegrees(..), toRadians)
import qualified Data.Astro.Effects.Precession as Precession
import qualified Data.Astro.Effects.Nutation as Nutation
import qualified Data.Astro.Effects.Aberration as Aberration
import qualified Data.Astro.Effects.Parallax as Parallax
refract :: DecimalDegrees -> Double -> Double -> DecimalDegrees
refract altitude temperature pressure =
let f = if altitude > (DD 15) then refractBigAlpha else refractSmallAlpha
in f altitude temperature pressure
refractBigAlpha :: DecimalDegrees -> Double -> Double -> DecimalDegrees
refractBigAlpha altitude temperature pressure =
let z = toRadians $ 90 - altitude
in DD $ 0.00452*pressure*(tan z) /(273+temperature)
refractSmallAlpha :: DecimalDegrees -> Double -> Double -> DecimalDegrees
refractSmallAlpha altitude temperature pressure =
let a = toRadians altitude
in DD $ pressure*(0.1594+0.0196*a+0.00002*a*a)/((273+temperature)*(1+0.505*a+0.0845*a*a))