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 :: DecimalDegrees -> Double -> Double -> DecimalDegrees
refract DecimalDegrees
altitude Double
temperature Double
pressure =
let f :: DecimalDegrees -> Double -> Double -> DecimalDegrees
f = if DecimalDegrees
altitude DecimalDegrees -> DecimalDegrees -> Bool
forall a. Ord a => a -> a -> Bool
> (Double -> DecimalDegrees
DD Double
15) then DecimalDegrees -> Double -> Double -> DecimalDegrees
refractBigAlpha else DecimalDegrees -> Double -> Double -> DecimalDegrees
refractSmallAlpha
in DecimalDegrees -> Double -> Double -> DecimalDegrees
f DecimalDegrees
altitude Double
temperature Double
pressure
refractBigAlpha :: DecimalDegrees -> Double -> Double -> DecimalDegrees
refractBigAlpha :: DecimalDegrees -> Double -> Double -> DecimalDegrees
refractBigAlpha DecimalDegrees
altitude Double
temperature Double
pressure =
let z :: Double
z = DecimalDegrees -> Double
toRadians (DecimalDegrees -> Double) -> DecimalDegrees -> Double
forall a b. (a -> b) -> a -> b
$ DecimalDegrees
90 DecimalDegrees -> DecimalDegrees -> DecimalDegrees
forall a. Num a => a -> a -> a
- DecimalDegrees
altitude
in Double -> DecimalDegrees
DD (Double -> DecimalDegrees) -> Double -> DecimalDegrees
forall a b. (a -> b) -> a -> b
$ Double
0.00452Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
pressureDouble -> Double -> Double
forall a. Num a => a -> a -> a
*(Double -> Double
forall a. Floating a => a -> a
tan Double
z) Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/(Double
273Double -> Double -> Double
forall a. Num a => a -> a -> a
+Double
temperature)
refractSmallAlpha :: DecimalDegrees -> Double -> Double -> DecimalDegrees
refractSmallAlpha :: DecimalDegrees -> Double -> Double -> DecimalDegrees
refractSmallAlpha DecimalDegrees
altitude Double
temperature Double
pressure =
let a :: Double
a = DecimalDegrees -> Double
toRadians DecimalDegrees
altitude
in Double -> DecimalDegrees
DD (Double -> DecimalDegrees) -> Double -> DecimalDegrees
forall a b. (a -> b) -> a -> b
$ Double
pressureDouble -> Double -> Double
forall a. Num a => a -> a -> a
*(Double
0.1594Double -> Double -> Double
forall a. Num a => a -> a -> a
+Double
0.0196Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
aDouble -> Double -> Double
forall a. Num a => a -> a -> a
+Double
0.00002Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
aDouble -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a)Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/((Double
273Double -> Double -> Double
forall a. Num a => a -> a -> a
+Double
temperature)Double -> Double -> Double
forall a. Num a => a -> a -> a
*(Double
1Double -> Double -> Double
forall a. Num a => a -> a -> a
+Double
0.505Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
aDouble -> Double -> Double
forall a. Num a => a -> a -> a
+Double
0.0845Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
aDouble -> Double -> Double
forall a. Num a => a -> a -> a
*Double
a))