module Data.Astro.CelestialObject
(
angleEquatorial
, angleEcliptic
)
where
import Data.Astro.Types (DecimalDegrees, toRadians, fromRadians, fromDecimalHours)
import Data.Astro.Coordinate (EquatorialCoordinates1(..), EclipticCoordinates(..))
angleEquatorial :: EquatorialCoordinates1 -> EquatorialCoordinates1 -> DecimalDegrees
angleEquatorial :: EquatorialCoordinates1 -> EquatorialCoordinates1 -> DecimalDegrees
angleEquatorial (EC1 DecimalDegrees
delta1 DecimalHours
alpha1) (EC1 DecimalDegrees
delta2 DecimalHours
alpha2) =
(DecimalDegrees, DecimalDegrees)
-> (DecimalDegrees, DecimalDegrees) -> DecimalDegrees
calcAngle (DecimalDegrees
delta1, DecimalHours -> DecimalDegrees
fromDecimalHours DecimalHours
alpha1) (DecimalDegrees
delta2, DecimalHours -> DecimalDegrees
fromDecimalHours DecimalHours
alpha2)
angleEcliptic :: EclipticCoordinates -> EclipticCoordinates -> DecimalDegrees
angleEcliptic :: EclipticCoordinates -> EclipticCoordinates -> DecimalDegrees
angleEcliptic (EcC DecimalDegrees
beta1 DecimalDegrees
lambda1) (EcC DecimalDegrees
beta2 DecimalDegrees
lambda2) =
(DecimalDegrees, DecimalDegrees)
-> (DecimalDegrees, DecimalDegrees) -> DecimalDegrees
calcAngle (DecimalDegrees
beta1, DecimalDegrees
lambda1) (DecimalDegrees
beta2, DecimalDegrees
lambda2)
calcAngle :: (DecimalDegrees, DecimalDegrees) -> (DecimalDegrees, DecimalDegrees) -> DecimalDegrees
calcAngle :: (DecimalDegrees, DecimalDegrees)
-> (DecimalDegrees, DecimalDegrees) -> DecimalDegrees
calcAngle (DecimalDegrees
up1, DecimalDegrees
round1) (DecimalDegrees
up2, DecimalDegrees
round2) =
let up1' :: Double
up1' = DecimalDegrees -> Double
toRadians DecimalDegrees
up1
round1' :: Double
round1' = DecimalDegrees -> Double
toRadians DecimalDegrees
round1
up2' :: Double
up2' = DecimalDegrees -> Double
toRadians DecimalDegrees
up2
round2' :: Double
round2' = DecimalDegrees -> Double
toRadians DecimalDegrees
round2
d :: Double
d = Double -> Double
forall a. Floating a => a -> a
acos (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ (Double -> Double
forall a. Floating a => a -> a
sin Double
up1')Double -> Double -> Double
forall a. Num a => a -> a -> a
*(Double -> Double
forall a. Floating a => a -> a
sin Double
up2') Double -> Double -> Double
forall a. Num a => a -> a -> a
+ (Double -> Double
forall a. Floating a => a -> a
cos Double
up1')Double -> Double -> Double
forall a. Num a => a -> a -> a
*(Double -> Double
forall a. Floating a => a -> a
cos Double
up2')Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double -> Double
forall a. Floating a => a -> a
cos(Double
round1'Double -> Double -> Double
forall a. Num a => a -> a -> a
-Double
round2')
in Double -> DecimalDegrees
fromRadians Double
d