Copyright | Travis Whitaker 2023 |
---|---|
License | MIT |
Maintainer | pi.boy.travis@gmail.com |
Stability | Provisional |
Portability | Portable (Windows, POSIX) |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
East-North-Up coordinates.
Synopsis
- data ENU a = ENU {}
- alignOrigin :: RealFloat a => ENU a -> ENU a -> ENU a
- liftAO2 :: RealFloat a => (V3 a -> V3 a -> b) -> ENU a -> ENU a -> b
- liftAO2V :: RealFloat a => (V3 a -> V3 a -> V3 a) -> ENU a -> ENU a -> ENU a
- rotNormToECEF :: Floating a => Radians a -> Radians a -> M33 a
- rotNormToECEFFromENU :: RealFloat a => ENU a -> M33 a
- enuToECEF :: RealFloat a => ENU a -> ECEF a
- rotECEFToNorm :: Floating a => Radians a -> Radians a -> M33 a
- rotECEFToNormFromENU :: RealFloat a => ENU a -> M33 a
- ecefToENU :: RealFloat a => ECEF a -> ECEF a -> ENU a
- disp :: Num a => ENU a -> V3 a -> ENU a
- diff :: RealFloat a => ENU a -> ENU a -> V3 a
- lerp :: RealFloat a => a -> ENU a -> ENU a -> ENU a
- dot :: RealFloat a => ENU a -> ENU a -> a
- quadrance :: Num a => ENU a -> a
- norm :: Floating a => ENU a -> a
- distance :: RealFloat a => ENU a -> ENU a -> a
- normalize :: (Floating a, Epsilon a) => ENU a -> ENU a
- project :: RealFloat a => ENU a -> ENU a -> ENU a
Documentation
R3 vector with the origin located at some arbitrary ECEF
position vector,
first basis pointing east at the origin, second basis vector pointing north
at the origin, and third basis vector normal to the plane tangent to the
ellipsoid at the origin.
Each value records both the ENU vector and the ENU origin. Most functions of multiple ENU values will require the points to occupy coordinal frames. Binary operations on ENU values should preserve the coordinate frame of the left value.
The Eq
and Ord
instances for this type implement structural equality,
i.e. ENU points with different enuOrigin
values will never be equal.
Floating point errors limit the usefulness of
exact-equality-as-coincidence.
Operations on ENU points use the uncorrected WGS84 geoid model.
Instances
R1 ENU Source # | |
Defined in Linear.Geo.ENU | |
R2 ENU Source # | |
R3 ENU Source # | |
Data a => Data (ENU a) Source # | |
Defined in Linear.Geo.ENU gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ENU a -> c (ENU a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (ENU a) # dataTypeOf :: ENU a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (ENU a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (ENU a)) # gmapT :: (forall b. Data b => b -> b) -> ENU a -> ENU a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ENU a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ENU a -> r # gmapQ :: (forall d. Data d => d -> u) -> ENU a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> ENU a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> ENU a -> m (ENU a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ENU a -> m (ENU a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ENU a -> m (ENU a) # | |
Bounded a => Bounded (ENU a) Source # | |
Generic (ENU a) Source # | |
Show a => Show (ENU a) Source # | |
NFData a => NFData (ENU a) Source # | |
Defined in Linear.Geo.ENU | |
Eq a => Eq (ENU a) Source # | |
Ord a => Ord (ENU a) Source # | |
type Rep (ENU a) Source # | |
Defined in Linear.Geo.ENU type Rep (ENU a) = D1 ('MetaData "ENU" "Linear.Geo.ENU" "linear-geo-0.1.0.0-LxCVplq22GGCkRzZB0XgZk" 'False) (C1 ('MetaCons "ENU" 'PrefixI 'True) (S1 ('MetaSel ('Just "enuOrigin") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ECEF a)) :*: S1 ('MetaSel ('Just "enuPoint") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (V3 a)))) |
alignOrigin :: RealFloat a => ENU a -> ENU a -> ENU a Source #
Align the second argument with the coordinate system of the first.
liftAO2 :: RealFloat a => (V3 a -> V3 a -> b) -> ENU a -> ENU a -> b Source #
Lift a function on vectors to a function on origin-aligned ENU points.
liftAO2V :: RealFloat a => (V3 a -> V3 a -> V3 a) -> ENU a -> ENU a -> ENU a Source #
Lift a binary operation on vectors to a binary operation on origin-aligned ENU points.
Rotation matrix that rotates the ENU coordinate frame at the provided latitude and longitude to the ECEF coordinate frame.
rotNormToECEFFromENU :: RealFloat a => ENU a -> M33 a Source #
Do rotNormToECEF
, but get the lat and lon from some ENU
s origin.
Rotation matrix that rotates the ECEF coordinate frame to the ENU coordinate frame at the provided latitude and longitude.
rotECEFToNormFromENU :: RealFloat a => ENU a -> M33 a Source #
Do rotECEFToNorm
, but get the lat and lon from some ENU
s origin.
diff :: RealFloat a => ENU a -> ENU a -> V3 a Source #
Affine subtraction. Get the vector from the first to the second ENU point.