astro-0.4.2.0: src/Data/Astro/Planet/PlanetDetails.hs
{-|
Module: Data.Astro.Planet.PlanetDetails
Description: Planet Details
Copyright: Alexander Ignatyev, 2016-2017
Planet Details.
-}
module Data.Astro.Planet.PlanetDetails
(
Planet(..)
, PlanetDetails(..)
, j2010PlanetDetails
, isInnerPlanet
)
where
import Data.Astro.Types (DecimalDegrees(..), AstronomicalUnits, fromDMS)
import Data.Astro.Time.JulianDate (JulianDate)
import Data.Astro.Time.Epoch (j2010)
-- | Planets of the Solar System
data Planet = Mercury
| Venus
| Earth
| Mars
| Jupiter
| Saturn
| Uranus
| Neptune
deriving (Show, Eq)
-- | Details of the planetary orbit at the epoch
data PlanetDetails = PlanetDetails {
pdPlanet :: Planet
, pdEpoch :: JulianDate
, pdTp :: Double -- ^ Orbital period in tropical years
, pdEpsilon :: DecimalDegrees -- ^ Longitude at the Epoch
, pdOmegaBar :: DecimalDegrees -- ^ Longitude of the perihelion
, pdE :: Double -- ^ Eccentricity of the orbit
, pdAlpha :: AstronomicalUnits -- ^ Semi-major axis of the orbit in AU
, pdI :: DecimalDegrees -- ^ Orbital inclination
, pdBigOmega :: DecimalDegrees -- ^ Longitude of the ascending node
, pdBigTheta :: DecimalDegrees -- ^ Angular diameter at 1 AU
} deriving (Show, Eq)
-- | Return True if the planet is inner (its orbit lies inside the Earth's orbit)
isInnerPlanet :: PlanetDetails -> Bool
isInnerPlanet pd
| pdPlanet pd == Mercury = True
| pdPlanet pd == Venus = True
| otherwise = False
-- | PlanetDetails at the reference Epoch J2010.0
j2010PlanetDetails :: Planet -> PlanetDetails
-- Epoch Tp Epsilon Omega Bar e alpha i Big Omega Big Theta
j2010PlanetDetails Mercury = PlanetDetails Mercury j2010 0.24085 75.5671 77.612 0.205627 0.387098 7.0051 48.449 (arcsecs 6.74)
j2010PlanetDetails Venus = PlanetDetails Venus j2010 0.615207 272.30044 131.54 0.006812 0.723329 3.3947 76.769 (arcsecs 16.92)
j2010PlanetDetails Earth = PlanetDetails Earth j2010 0.999996 99.556772 103.2055 0.016671 0.999985 0 0 (arcsecs 0)
j2010PlanetDetails Mars = PlanetDetails Mars j2010 1.880765 109.09646 336.217 0.093348 1.523689 1.8497 49.632 (arcsecs 9.36)
j2010PlanetDetails Jupiter = PlanetDetails Jupiter j2010 11.857911 337.917132 14.6633 0.048907 5.20278 1.3035 100.595 (arcsecs 196.74)
j2010PlanetDetails Saturn = PlanetDetails Saturn j2010 29.310579 172.398316 89.567 0.053853 9.51134 2.4873 113.752 (arcsecs 165.6)
j2010PlanetDetails Uranus = PlanetDetails Uranus j2010 84.039492 356.135400 172.884833 0.046321 19.21814 0.773059 73.926961 (arcsecs 65.8)
j2010PlanetDetails Neptune = PlanetDetails Neptune j2010 165.845392 326.895127 23.07 0.010483 30.1985 1.7673 131.879 (arcsecs 62.2)
-- | arcseconds to DecimalHours
arcsecs = fromDMS 0 0