module Data.Astro.Effects.Aberration
(
includeAberration
)
where
import Data.Astro.Types (DecimalDegrees, toRadians, fromDMS)
import Data.Astro.Time.JulianDate (JulianDate)
import Data.Astro.Coordinate (EclipticCoordinates(..))
includeAberration :: EclipticCoordinates -> JulianDate -> DecimalDegrees -> EclipticCoordinates
includeAberration :: EclipticCoordinates
-> JulianDate -> DecimalDegrees -> EclipticCoordinates
includeAberration (EcC DecimalDegrees
beta DecimalDegrees
lambda) JulianDate
jd DecimalDegrees
sunLambda =
let lambdaDiff :: Double
lambdaDiff = DecimalDegrees -> Double
toRadians (DecimalDegrees -> Double) -> DecimalDegrees -> Double
forall a b. (a -> b) -> a -> b
$ DecimalDegrees
sunLambda DecimalDegrees -> DecimalDegrees -> DecimalDegrees
forall a. Num a => a -> a -> a
- DecimalDegrees
lambda
beta' :: Double
beta' = DecimalDegrees -> Double
toRadians DecimalDegrees
beta
dLambda :: Double
dLambda = -Double
20.5 Double -> Double -> Double
forall a. Num a => a -> a -> a
* (Double -> Double
forall a. Floating a => a -> a
cos Double
lambdaDiff) Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ (Double -> Double
forall a. Floating a => a -> a
cos Double
beta')
dBeta :: Double
dBeta = -Double
20.5 Double -> Double -> Double
forall a. Num a => a -> a -> a
* (Double -> Double
forall a. Floating a => a -> a
sin Double
lambdaDiff) Double -> Double -> Double
forall a. Num a => a -> a -> a
* (Double -> Double
forall a. Floating a => a -> a
sin Double
beta')
in DecimalDegrees -> DecimalDegrees -> EclipticCoordinates
EcC (DecimalDegrees
beta DecimalDegrees -> DecimalDegrees -> DecimalDegrees
forall a. Num a => a -> a -> a
+ Int -> Int -> Double -> DecimalDegrees
forall a. RealFrac a => Int -> Int -> a -> DecimalDegrees
fromDMS Int
0 Int
0 Double
dBeta) (DecimalDegrees
lambda DecimalDegrees -> DecimalDegrees -> DecimalDegrees
forall a. Num a => a -> a -> a
+ Int -> Int -> Double -> DecimalDegrees
forall a. RealFrac a => Int -> Int -> a -> DecimalDegrees
fromDMS Int
0 Int
0 Double
dLambda)