rings-0.0.3: Ring-like objects.

Safe HaskellSafe
LanguageHaskell2010

Data.Algebra.Quaternion

Description

See the spatial-math package for usage.

Synopsis

Documentation

data Quaternion a Source #

Constructors

Quaternion !a !(V3 a) 
Instances
Functor Quaternion Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

fmap :: (a -> b) -> Quaternion a -> Quaternion b #

(<$) :: a -> Quaternion b -> Quaternion a #

Foldable Quaternion Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

fold :: Monoid m => Quaternion m -> m #

foldMap :: Monoid m => (a -> m) -> Quaternion a -> m #

foldr :: (a -> b -> b) -> b -> Quaternion a -> b #

foldr' :: (a -> b -> b) -> b -> Quaternion a -> b #

foldl :: (b -> a -> b) -> b -> Quaternion a -> b #

foldl' :: (b -> a -> b) -> b -> Quaternion a -> b #

foldr1 :: (a -> a -> a) -> Quaternion a -> a #

foldl1 :: (a -> a -> a) -> Quaternion a -> a #

toList :: Quaternion a -> [a] #

null :: Quaternion a -> Bool #

length :: Quaternion a -> Int #

elem :: Eq a => a -> Quaternion a -> Bool #

maximum :: Ord a => Quaternion a -> a #

minimum :: Ord a => Quaternion a -> a #

sum :: Num a => Quaternion a -> a #

product :: Num a => Quaternion a -> a #

Distributive Quaternion Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

distribute :: Functor f => f (Quaternion a) -> Quaternion (f a) #

collect :: Functor f => (a -> Quaternion b) -> f a -> Quaternion (f b) #

distributeM :: Monad m => m (Quaternion a) -> Quaternion (m a) #

collectM :: Monad m => (a -> Quaternion b) -> m a -> Quaternion (m b) #

Representable Quaternion Source # 
Instance details

Defined in Data.Algebra.Quaternion

Associated Types

type Rep Quaternion :: Type #

Methods

tabulate :: (Rep Quaternion -> a) -> Quaternion a #

index :: Quaternion a -> Rep Quaternion -> a #

Foldable1 Quaternion Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

fold1 :: Semigroup m => Quaternion m -> m #

foldMap1 :: Semigroup m => (a -> m) -> Quaternion a -> m #

toNonEmpty :: Quaternion a -> NonEmpty a #

Semiring a => Semimodule a (Quaternion a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

(*.) :: a -> Quaternion a -> Quaternion a Source #

(.*) :: Quaternion a -> a -> Quaternion a Source #

Eq a => Eq (Quaternion a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

(==) :: Quaternion a -> Quaternion a -> Bool #

(/=) :: Quaternion a -> Quaternion a -> Bool #

Ord a => Ord (Quaternion a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Show a => Show (Quaternion a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Generic (Quaternion a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Associated Types

type Rep (Quaternion a) :: Type -> Type #

Methods

from :: Quaternion a -> Rep (Quaternion a) x #

to :: Rep (Quaternion a) x -> Quaternion a #

Ring a => Semigroup (Multiplicative (Quaternion a)) Source # 
Instance details

Defined in Data.Algebra.Quaternion

(Additive - Semigroup) a => Semigroup (Additive (Quaternion a)) Source # 
Instance details

Defined in Data.Algebra.Quaternion

(Additive - Semigroup) a => Semigroup (Quaternion a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Ring a => Monoid (Multiplicative (Quaternion a)) Source # 
Instance details

Defined in Data.Algebra.Quaternion

(Additive - Monoid) a => Monoid (Additive (Quaternion a)) Source # 
Instance details

Defined in Data.Algebra.Quaternion

(Additive - Monoid) a => Monoid (Quaternion a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

(Additive - Group) a => Group (Additive (Quaternion a)) Source # 
Instance details

Defined in Data.Algebra.Quaternion

(Additive - Group) a => Group (Quaternion a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

(Additive - Group) a => Loop (Additive (Quaternion a)) Source # 
Instance details

Defined in Data.Algebra.Quaternion

(Additive - Group) a => Loop (Quaternion a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

(Additive - Group) a => Quasigroup (Additive (Quaternion a)) Source # 
Instance details

Defined in Data.Algebra.Quaternion

(Additive - Group) a => Quasigroup (Quaternion a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

(Additive - Group) a => Magma (Additive (Quaternion a)) Source # 
Instance details

Defined in Data.Algebra.Quaternion

(Additive - Group) a => Magma (Quaternion a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

(<<) :: Quaternion a -> Quaternion a -> Quaternion a #

Ring a => Ring (Quaternion a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Ring a => Semiring (Quaternion a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Ring a => Presemiring (Quaternion a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Generic1 Quaternion Source # 
Instance details

Defined in Data.Algebra.Quaternion

Associated Types

type Rep1 Quaternion :: k -> Type #

type Rep Quaternion Source # 
Instance details

Defined in Data.Algebra.Quaternion

type Rep (Quaternion a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

type Rep (Quaternion a) = D1 (MetaData "Quaternion" "Data.Algebra.Quaternion" "rings-0.0.3-21Z3wlGnIMkBc1cJ09ZojY" False) (C1 (MetaCons "Quaternion" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 a) :*: S1 (MetaSel (Nothing :: Maybe Symbol) SourceUnpack SourceStrict DecidedStrict) (Rec0 (V3 a))))
type Rep1 Quaternion Source # 
Instance details

Defined in Data.Algebra.Quaternion

type Rep1 Quaternion = D1 (MetaData "Quaternion" "Data.Algebra.Quaternion" "rings-0.0.3-21Z3wlGnIMkBc1cJ09ZojY" False) (C1 (MetaCons "Quaternion" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) Par1 :*: S1 (MetaSel (Nothing :: Maybe Symbol) SourceUnpack SourceStrict DecidedStrict) (Rec1 V3)))

quat :: a -> a -> a -> a -> Quaternion a Source #

Obtain a Quaternion from 4 base field elements.

scal :: Quaternion a -> a Source #

Real or scalar part of a quaternion.

rotate :: Ring a => Quaternion a -> V3 a -> V3 a Source #

Use a quaternion to rotate a vector.

>>> rotate qk . rotate qj $ V3 1 1 0 :: V3 Int
V3 1 (-1) 0

normalize :: QuatD -> QuatD Source #

Scale a QuatD to unit length.

>>> normalize $ normalize $ quat 2.0 2.0 2.0 2.0
Quaternion 0.5 (V3 0.5 0.5 0.5)

qe :: Semiring a => Quaternion a Source #

The real quaternion.

Represents no rotation.

qe = unit

qi :: Semiring a => Quaternion a Source #

The i quaternion.

Represents a \( \pi \) radian rotation about the x axis.

>>> rotate (qi :: QuatM) $ V3 1 0 0
V3 1.000000 0.000000 0.000000
>>> rotate (qi :: QuatM) $ V3 0 1 0
V3 0.000000 -1.000000 0.000000
>>> rotate (qi :: QuatM) $ V3 0 0 1
V3 0.000000 0.000000 -1.000000
>>> qi * qj
Quaternion 0 (V3 0 0 1)

qj :: Semiring a => Quaternion a Source #

The j quaternion.

Represents a \( \pi \) radian rotation about the y axis.

>>> rotate (qj :: QuatM) $ V3 1 0 0
V3 -1.000000 0.000000 0.000000
>>> rotate (qj :: QuatM) $ V3 0 1 0
V3 0.000000 1.000000 0.000000
>>> rotate (qj :: QuatM) $ V3 0 0 1
V3 0.000000 0.000000 -1.000000
>>> qj * qk
Quaternion 0 (V3 1 0 0)

qk :: Semiring a => Quaternion a Source #

The k quaternion.

Represents a \( \pi \) radian rotation about the z axis.

>>> rotate (qk :: QuatM) $ V3 1 0 0
V3 -1.000000 0.000000 0.000000
>>> rotate (qk :: QuatM) $ V3 0 1 0
V3 0.000000 -1.000000 0.000000
>>> rotate (qk :: QuatM) $ V3 0 0 1
V3 0.000000 0.000000 1.000000
>>> qk * qi
Quaternion 0 (V3 0 1 0)
>>> qi * qj * qk
Quaternion (-1) (V3 0 0 0)