-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | 3d math including quaternions/euler angles/dcms and utility functions
--
-- This is a port of my mathlib C library:
-- https:github.comghornmathlib
@package spatial-math
@version 0.1.3
module Quat
data Quat a
Quat :: a -> a -> a -> a -> Quat a
zipWithQuat :: (a -> b -> c) -> Quat a -> Quat b -> Quat c
-- | q_out = q_in^-1
inv :: Num a => Quat a -> Quat a
-- | return ||q||
norm :: Floating a => Quat a -> a
-- | q /= ||q||
normalize :: Floating a => Quat a -> Quat a
-- | quaternion multiply: qa * qb
qmult :: (Num a, Ord a) => Quat a -> Quat a -> Quat a
-- | quaternion multiply then normalize
qmult' :: (Floating a, Ord a) => Quat a -> Quat a -> Quat a
instance Data a => Data (Quat a)
instance Typeable1 Quat
instance Show a => Show (Quat a)
instance Eq a => Eq (Quat a)
instance (Num a, Ord a) => Num (Quat a)
instance Functor Quat
module Xyz
data Xyz a
Xyz :: a -> a -> a -> Xyz a
zipWithXyz :: (a -> b -> c) -> Xyz a -> Xyz b -> Xyz c
-- | c = a (cross) b
cross :: Num a => Xyz a -> Xyz a -> Xyz a
-- | c = a (dot) b
dot :: Num a => Xyz a -> Xyz a -> a
-- | c = vec (dot) vec
normSquared :: Num a => Xyz a -> a
-- | norm(x)
norm :: Floating a => Xyz a -> a
-- | norm(a - b)
distance :: Floating a => Xyz a -> Xyz a -> a
-- | vec_out = vec_in*scale_factor
scale :: Num a => a -> Xyz a -> Xyz a
-- | vec_out = scale (new_norm/norm(vec_in)) vec_in
normalizeTo :: Floating a => a -> Xyz a -> Xyz a -> Xyz a
-- | vec_out = vec_in/norm(vec_in)
normalize :: Floating a => Xyz a -> Xyz a -> Xyz a
-- | v_out = M*v
mult3x3ByXyz :: (Num a, Storable a) => Matrix a -> Xyz a -> Xyz a
mult3x3TransposeByXyz :: (Num a, Storable a) => Matrix a -> Xyz a -> Xyz a
instance Data a => Data (Xyz a)
instance Typeable1 Xyz
instance Show a => Show (Xyz a)
instance Eq a => Eq (Xyz a)
instance Num a => Num (Xyz a)
instance Functor Xyz
module SpatialMath
data Euler a
Euler :: a -> a -> a -> Euler a
rotateXyzAboutX :: Floating a => Xyz a -> a -> Xyz a
euler321OfQuat :: RealFloat a => Quat a -> Euler a
euler321OfDcm :: (RealFloat a, Storable a) => Matrix a -> Euler a
quatOfEuler321 :: (Floating a, Ord a) => Euler a -> Quat a
dcmOfQuat :: (Num a, Element a) => Quat a -> Matrix a
dcmOfQuatB2A :: (Num a, Element a) => Quat a -> Matrix a
dcmOfEuler321 :: (Floating a, Element a, Ord a) => Euler a -> Matrix a
quatOfDcm :: (Storable a, RealFloat a) => Matrix a -> Quat a
quatOfDcmB2A :: (Storable a, RealFloat a) => Matrix a -> Quat a
-- | vec_b = R_a2b * vec_a
rotVecByDcm :: (Num a, Storable a) => Matrix a -> Xyz a -> Xyz a
-- | vec_a = R_a2b^T * vec_b
rotVecByDcmB2A :: (Num a, Storable a) => Matrix a -> Xyz a -> Xyz a
-- | vec_b = q_a2b * vec_a * q_a2b^(-1) vec_b = R(q_a2b) * vec_a
rotVecByQuat :: (Num a, Element a) => Quat a -> Xyz a -> Xyz a
rotVecByQuatB2A :: (Num a, Element a) => Quat a -> Xyz a -> Xyz a
rotVecByEuler :: (Floating a, Element a, Ord a) => Euler a -> Xyz a -> Xyz a
rotVecByEulerB2A :: (Floating a, Element a, Ord a) => Euler a -> Xyz a -> Xyz a
instance Data a => Data (Euler a)
instance Typeable1 Euler
instance Eq a => Eq (Euler a)
instance Show a => Show (Euler a)