-- 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.4 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 rotateXyzAboutY :: Floating a => Xyz a -> a -> Xyz a rotateXyzAboutZ :: 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)