Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
See the spatial-math package for usage.
Synopsis
- type QuatF = Quaternion Float
- type QuatD = Quaternion Double
- type QuatR = Quaternion Rational
- type QuatM = Quaternion Micro
- type QuatN = Quaternion Nano
- type QuatP = Quaternion Pico
- data Quaternion a = Quaternion !a !(V3 a)
- quat :: a -> a -> a -> a -> Quaternion a
- scal :: Quaternion a -> a
- vect :: Quaternion a -> V3 a
- rotate :: Ring a => Quaternion a -> V3 a -> V3 a
- normalize :: QuatD -> QuatD
- qe :: Semiring a => Quaternion a
- qi :: Semiring a => Quaternion a
- qj :: Semiring a => Quaternion a
- qk :: Semiring a => Quaternion a
Documentation
type QuatF = Quaternion Float Source #
type QuatD = Quaternion Double Source #
type QuatR = Quaternion Rational Source #
type QuatM = Quaternion Micro Source #
type QuatN = Quaternion Nano Source #
type QuatP = Quaternion Pico Source #
data Quaternion a Source #
Quaternion !a !(V3 a) |
Instances
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.
vect :: Quaternion a -> V3 a Source #
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)
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)