| Safe Haskell | Safe |
|---|---|
| Language | Haskell2010 |
Data.Semifield.Quaternion
Synopsis
- data Quaternion a = Quaternion !a !(V3 a)
- type QuatF = Quaternion Float
- type QuatD = Quaternion Double
- type QuatR = Quaternion Rational
- type QuatM = Quaternion Micro
- type QuatN = Quaternion Nano
- type QuatP = Quaternion Pico
- refpos :: Field a => V3 a
- iter4 :: Ring a => Quaternion a -> V3 a -> V3 a
- quat :: a -> a -> a -> a -> Quaternion a
- real :: Quaternion a -> a
- imag :: Quaternion a -> V3 a
- norm :: Semiring a => Quaternion a -> a
- normalize :: QuatD -> QuatD
- rotate :: Ring a => Quaternion a -> V3 a -> V3 a
- prop_conj :: Ring a => (a -> a -> Bool) -> Quaternion a -> Quaternion a -> Bool
- conj :: Group a => Quaternion a -> Quaternion a
- qi :: Unital a => Quaternion a
- qj :: Unital a => Quaternion a
- qk :: Unital a => Quaternion a
- cosAngle :: QuatP -> V3 Pico -> Pico
- q00 :: Field a => Quaternion a
- q01 :: Field a => Quaternion a
- q02 :: Field a => Quaternion a
- q03 :: Field a => Quaternion a
- q04 :: Field a => Quaternion a
- q05 :: Field a => Quaternion a
- q06 :: Field a => Quaternion a
- q07 :: Field a => Quaternion a
- q08 :: Field a => Quaternion a
- q09 :: Field a => Quaternion a
- q10 :: Field a => Quaternion a
- q11 :: Field a => Quaternion a
- q12 :: Field a => Quaternion a
- q13 :: Field a => Quaternion a
- q14 :: Field a => Quaternion a
- q15 :: Field a => Quaternion a
- q16 :: Field a => Quaternion a
- q17 :: Field a => Quaternion a
- q18 :: Field a => Quaternion a
- q19 :: Field a => Quaternion a
- q20 :: Field a => Quaternion a
- q21 :: Field a => Quaternion a
- q22 :: Field a => Quaternion a
- q23 :: Field a => Quaternion a
- irt2 :: Field a => a
- irt3 :: Field a => a
- divq :: Semiring a => (a -> a -> a) -> (a -> a) -> Quaternion a -> Quaternion a -> Quaternion a
- (/) :: QuatD -> QuatD -> QuatD
Documentation
data Quaternion a Source #
Constructors
| Quaternion !a !(V3 a) |
Instances
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 #
quat :: a -> a -> a -> a -> Quaternion a Source #
Obtain a Quaternion from 4 base field elements.
real :: Quaternion a -> a Source #
Real or scalar part of a quaternion.
imag :: Quaternion a -> V3 a Source #
Imaginary or vector part of a quaternion.
norm :: Semiring a => Quaternion a -> a Source #
Squared norm of a quaternion.
norm x == real $ x >< conj x
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 1 (-1) 0
prop_conj :: Ring a => (a -> a -> Bool) -> Quaternion a -> Quaternion a -> Bool Source #
conj :: Group a => Quaternion a -> Quaternion a Source #
qi :: Unital a => Quaternion a Source #
The i quaternion.
Represents a \( \pi \) radian rotation about the x axis.
>>>rotate (qi :: QuatM) $ V3 1 0 0V3 1.000000 0.000000 0.000000>>>rotate (qi :: QuatM) $ V3 0 1 0V3 0.000000 -1.000000 0.000000>>>rotate (qi :: QuatM) $ V3 0 0 1V3 0.000000 0.000000 -1.000000
>>>qi >< qjQuaternion 0 (V3 0 0 1)
qj :: Unital a => Quaternion a Source #
The j quaternion.
Represents a \( \pi \) radian rotation about the y axis.
>>>rotate (qj :: QuatM) $ V3 1 0 0V3 -1.000000 0.000000 0.000000>>>rotate (qj :: QuatM) $ V3 0 1 0V3 0.000000 1.000000 0.000000>>>rotate (qj :: QuatM) $ V3 0 0 1V3 0.000000 0.000000 -1.000000
>>>qj >< qkQuaternion 0 (V3 1 0 0)
qk :: Unital a => Quaternion a Source #
The k quaternion.
Represents a \( \pi \) radian rotation about the z axis.
>>>rotate (qk :: QuatM) $ V3 1 0 0V3 -1.000000 0.000000 0.000000>>>rotate (qk :: QuatM) $ V3 0 1 0V3 0.000000 -1.000000 0.000000>>>rotate (qk :: QuatM) $ V3 0 0 1V3 0.000000 0.000000 1.000000
>>>qk >< qiQuaternion 0 (V3 0 1 0)>>>qi >< qj >< qkQuaternion (-1) (V3 0 0 0)
q00 :: Field a => Quaternion a Source #
Identity (empty) rotation.
All rotations written according to the right-hand rule.
q01 :: Field a => Quaternion a Source #
A \( \pi/2 \) radian rotation about the y axis.
>>>m33 0 0 1 0 1 0 (-1) 0 0 #> V3 0 1 0 :: V3 MicroV3 0.000000 1.000000 0.000000
q02 :: Field a => Quaternion a Source #
A \( \pi \) radian rotation about the y axis.
q03 :: Field a => Quaternion a Source #
A \( 3 \pi/2 \) radian rotation about the y axis.
q04 :: Field a => Quaternion a Source #
A \( \pi/2 \) radian rotation about the z axis.
>>>rotate (q04 :: QuatM) $ V3 0 0 1V3 0.000000 0.000000 0.999996>>>rotate (q04 :: QuatM) $ V3 1 1 0V3 -0.999998 0.999997 0.000000
q05 :: Field a => Quaternion a Source #
A \( 2 \pi/3 \) radian rotation about the x-y-z axis.
q05 ≡ q01 >< q04
>>>rotate (q05 :: QuatM) $ V3 1 1 1V3 1.000000 1.000000 1.000000>>>cosAngle q05 (fmap (irt2><) $ V3 1 (-1) 0)-0.499999999991>>>cosAngle q05 (fmap (irt2><) $ V3 0 1 (-1))-0.499999999991>>>cosAngle q05 (fmap (irt2><irt3><) $ V3 1 (-2) 1)-0.499999999993
q06 :: Field a => Quaternion a Source #
A \( \pi \) radian rotation about the x-y axis.
q06 ≡ q02 >< q04
>>>rotate (q06 :: QuatM) $ V3 1 1 0V3 0.999997 0.999997 0.000000>>>rotate (q06 :: QuatM) $ V3 0 0 1V3 0.000000 0.000000 -0.999997
q07 :: Field a => Quaternion a Source #
A \( 2 \pi/3 \) radian rotation about the (-x)-(-y)-z axis.
Equivalent to a \( 3 \pi/2 \) radian rotation about y axis, followed by \( \pi/2 \) radian rotation about z axis:
q07 ≡ q03 >< q04
>>>rotate (q07 :: QuatM) $ V3 1 1 (-1)V3 1.000000 1.000000 -1.000000>>>cosAngle q07 ((irt2><irt3><) <$> V3 (-1) 2 1)-0.499999999993
q08 :: Field a => Quaternion a Source #
A \( 3 \pi/2 \) radian rotation about the z axis.
>>>rotate (q08 :: QuatM) $ V3 0 0 1V3 0.000000 0.000000 0.999996>>>rotate (q08 :: QuatM) $ V3 1 1 0V3 0.999997 -0.999997 0.000000
q09 :: Field a => Quaternion a Source #
A \( 2 \pi/3 \) radian rotation about the (-x)-y-(-z) axis.
q09 ≡ q01 >< q08
>>>rotate (q09 :: QuatM) $ V3 1 (-1) 1V3 1.000000 -1.000000 1.000000>>>cosAngle q09 ((irt2><irt3><) <$> V3 1 2 1)-0.499999999993
q10 :: Field a => Quaternion a Source #
q10 ≡ q02 >< q08
q11 :: Field a => Quaternion a Source #
A \( 2 \pi/3 \) radian rotation about the x-(-y)-(-z) axis.
q11 ≡ q03 >< q08
>>>rotate (q11 :: QuatM) $ V3 (-1) 1 1V3 1.000000 1.000000 -1.000000>>>cosAngle q11 ((irt2><irt3><) <$> V3 1 2 (-1))-0.499999999993
q12 :: Field a => Quaternion a Source #
A \( \pi/2 \) radian rotation about the x axis.
>>>rotate (q12 :: QuatM) $ V3 1 0 0V3 0.999996 0.000000 0.000000>>>rotate (q12 :: QuatM) $ V3 0 1 1V3 0.000000 -0.999998 0.999997
q13 :: Field a => Quaternion a Source #
q13 ≡ q01 >< q12
q14 :: Field a => Quaternion a Source #
q14 ≡ q02 >< q12
q15 :: Field a => Quaternion a Source #
q15 ≡ q03 >< q12
q16 :: Field a => Quaternion a Source #
A \( \pi \) radian rotation about the x axis.
λ> rotate (q16 :: QuatM) $ V3 1 0 0 V3 1.000000 0.000000 0.000000 λ> rotate (q16 :: QuatM) $ V3 0 1 1 V3 0.000000 -1.000000 -1.000000
q17 :: Field a => Quaternion a Source #
q17 ≡ q01 >< q16
q18 :: Field a => Quaternion a Source #
q18 ≡ q02 >< q16
q19 :: Field a => Quaternion a Source #
q19 ≡ q03 >< q16
q20 :: Field a => Quaternion a Source #
A \( 3 \pi/2 \) radian rotation about the x axis.
>>>rotate (q20 :: QuatM) $ V3 1 0 0V3 0.999996 0.000000 0.000000>>>rotate (q20 :: QuatM) $ V3 0 1 1V3 0.000000 0.999997 -0.999997
q21 :: Field a => Quaternion a Source #
q21 ≡ q01 >< q20
q22 :: Field a => Quaternion a Source #
q22 ≡ q02 >< q20
q23 :: Field a => Quaternion a Source #
q23 ≡ q03 >< q20
divq :: Semiring a => (a -> a -> a) -> (a -> a) -> Quaternion a -> Quaternion a -> Quaternion a Source #