Safe Haskell | None |
---|---|
Language | Haskell2010 |
class declarations
- class AbelianGroup g where
- vecSum :: AbelianGroup g => [g] -> g
- class MultSemiGroup r where
- class (AbelianGroup r, MultSemiGroup r) => Ring r
- semigroupProduct :: MultSemiGroup r => [r] -> r
- class LeftModule r m where
- class RightModule m r | m -> r, r -> m where
- class AbelianGroup (v a) => Vector a v where
- class Num a => DotProd a v where
- class (Floating a, DotProd a v) => Norm a v where
- class CrossProd v where
- normalize :: (Vector a v, Norm a v) => v a -> v a
- distance :: (Vector a v, Norm a v) => v a -> v a -> a
- angle :: (Vector a v, Norm a v) => v a -> v a -> a
- angle' :: (Floating a, Vector a v, UnitVector a v u, DotProd a v) => u a -> u a -> a
- class (Vector a v, Norm a v) => UnitVector a v u | u -> v, v -> u where
- mkNormal :: v a -> u a
- toNormalUnsafe :: v a -> u a
- fromNormal :: u a -> v a
- fromNormalRadius :: a -> u a -> v a
- class Pointwise v where
- class Extend a u v where
- extendZero :: u a -> v a
- extendWith :: a -> u a -> v a
- trim :: v a -> u a
- class Dimension a where
- class Transpose m n | m -> n, n -> m where
- transpose :: m -> n
- class SquareMatrix m where
- class Tensor t v | t -> v where
- outer :: v -> v -> t
- class Diagonal s t | t -> s where
- diag :: s -> t
- class Determinant a m where
- det :: m -> a
- class SquareMatrix (m a) => Orthogonal a m o | m -> o, o -> m where
- fromOrtho :: o a -> m a
- toOrthoUnsafe :: m a -> o a
- class (Vector a v, Orthogonal a n o, Diagonal (v a) (n a)) => Projective a v n o m p | m -> p, p -> m, p -> o, o -> p, p -> n, n -> p, p -> v, v -> p, n -> o, n -> v, v -> n where
- fromProjective :: p a -> m a
- toProjectiveUnsafe :: m a -> p a
- orthogonal :: o a -> p a
- linear :: n a -> p a
- translation :: v a -> p a
- scaling :: v a -> p a
- class (AbelianGroup m, SquareMatrix m) => MatrixNorms a m where
- frobeniusNorm :: m -> a
- matrixDistance :: m -> m -> a
- operatorNorm :: m -> a
- project :: (Fractional a, Vector a v, DotProd a v) => v a -> v a -> v a
- project' :: (Vector a v, UnitVector a v u, Norm a v) => v a -> u a -> v a
- projectUnsafe :: (Vector a v, DotProd a v) => v a -> v a -> v a
- flipNormal :: UnitVector a v n => n a -> n a
- householder :: (Vector a v, UnitVector a v u, SquareMatrix (m a), Vector a m, Tensor (m a) (v a)) => u a -> m a
- householderOrtho :: (Vector a v, UnitVector a v u, SquareMatrix (m a), Vector a m, Tensor (m a) (v a), Orthogonal a m o) => u a -> o a
Documentation
class AbelianGroup g where Source
Num a => AbelianGroup (V4 a) | |
Num a => AbelianGroup (V3 a) | |
Num a => AbelianGroup (V2 a) | |
Num a => AbelianGroup (M4 a) | |
Num a => AbelianGroup (M3 a) | |
Num a => AbelianGroup (M2 a) |
vecSum :: AbelianGroup g => [g] -> g Source
class MultSemiGroup r where Source
Num a => MultSemiGroup (Proj4 a) | |
Fractional a => MultSemiGroup (Proj3 a) | |
Num a => MultSemiGroup (Ortho4 a) | |
Fractional a => MultSemiGroup (Ortho3 a) | |
Fractional a => MultSemiGroup (Ortho2 a) | |
Num a => MultSemiGroup (M4 a) | |
Fractional a => MultSemiGroup (M3 a) | |
Fractional a => MultSemiGroup (M2 a) |
class (AbelianGroup r, MultSemiGroup r) => Ring r Source
Num a => Ring (M4 a) | |
Fractional a => Ring (M3 a) | |
Fractional a => Ring (M2 a) |
semigroupProduct :: MultSemiGroup r => [r] -> r Source
class LeftModule r m where Source
Num a => LeftModule (M4 a) (V4 a) | |
Num a => LeftModule (M3 a) (V3 a) | |
Num a => LeftModule (M2 a) (V2 a) |
class RightModule m r | m -> r, r -> m where Source
Num a => RightModule (V4 a) (M4 a) | |
Fractional a => RightModule (V3 a) (M3 a) | |
Fractional a => RightModule (V2 a) (M2 a) |
class AbelianGroup (v a) => Vector a v where Source
angle' :: (Floating a, Vector a v, UnitVector a v u, DotProd a v) => u a -> u a -> a Source
the angle between two unit vectors
class (Vector a v, Norm a v) => UnitVector a v u | u -> v, v -> u where Source
:: v a | |
-> u a | normalizes the input |
:: v a | |
-> u a | does not normalize the input! |
fromNormal :: u a -> v a Source
fromNormalRadius :: a -> u a -> v a Source
Floating a => UnitVector a V4 Normal4 | |
Floating a => UnitVector a V3 Normal3 | |
Floating a => UnitVector a V2 Normal2 |
class Extend a u v where Source
conversion between vectors (and matrices) of different dimensions
:: u a | |
-> v a | example: |
:: a | |
-> u a | |
-> v a | example: |
:: v a | |
-> u a | example: |
class Dimension a where Source
Num a => Dimension (Normal4 a) | |
Num a => Dimension (Normal3 a) | |
Num a => Dimension (Normal2 a) | |
Num a => Dimension (V4 a) | |
Num a => Dimension (V3 a) | |
Num a => Dimension (V2 a) | |
Num a => Dimension (Ortho4 a) | |
Num a => Dimension (Ortho3 a) | |
Num a => Dimension (Ortho2 a) | |
Num a => Dimension (M4 a) | |
Num a => Dimension (M3 a) | |
Num a => Dimension (M2 a) |
class Transpose m n | m -> n, n -> m where Source
Transpose (Proj4 a) (Proj4 a) | |
Transpose (Proj3 a) (Proj3 a) | |
Transpose (Ortho4 a) (Ortho4 a) | |
Transpose (Ortho3 a) (Ortho3 a) | |
Transpose (Ortho2 a) (Ortho2 a) | |
Transpose (M4x3 a) (M3x4 a) | |
Transpose (M4x2 a) (M2x4 a) | |
Transpose (M3x4 a) (M4x3 a) | |
Transpose (M3x2 a) (M2x3 a) | |
Transpose (M2x4 a) (M4x2 a) | |
Transpose (M2x3 a) (M3x2 a) | |
Transpose (M4 a) (M4 a) | |
Transpose (M3 a) (M3 a) | |
Transpose (M2 a) (M2 a) |
class SquareMatrix m where Source
Fractional a => SquareMatrix (Proj4 a) | |
Fractional a => SquareMatrix (Proj3 a) | |
Fractional a => SquareMatrix (Ortho4 a) | |
Fractional a => SquareMatrix (Ortho3 a) | |
Fractional a => SquareMatrix (Ortho2 a) | |
Num a => SquareMatrix (M4 a) | |
Fractional a => SquareMatrix (M3 a) | |
Fractional a => SquareMatrix (M2 a) |
class Determinant a m where Source
Num a => Determinant a (M4 a) | |
Num a => Determinant a (M3 a) | |
Num a => Determinant a (M2 a) | |
Num a => Determinant a (Ortho2 a) | |
Num a => Determinant a (Ortho3 a) | |
Num a => Determinant a (Ortho4 a) | |
Num a => Determinant a (V2 a, V2 a) | |
Num a => Determinant a (V3 a, V3 a, V3 a) |
class SquareMatrix (m a) => Orthogonal a m o | m -> o, o -> m where Source
fromOrtho :: o a -> m a Source
toOrthoUnsafe :: m a -> o a Source
Fractional a => Orthogonal a M4 Ortho4 | |
Fractional a => Orthogonal a M3 Ortho3 | |
Fractional a => Orthogonal a M2 Ortho2 |
class (Vector a v, Orthogonal a n o, Diagonal (v a) (n a)) => Projective a v n o m p | m -> p, p -> m, p -> o, o -> p, p -> n, n -> p, p -> v, v -> p, n -> o, n -> v, v -> n where Source
"Projective" matrices have the following form: the top left corner is an any matrix, the bottom right corner is 1, and the top-right column is zero. These describe the affine orthogonal transformation of the space one dimension less.
fromProjective :: p a -> m a Source
toProjectiveUnsafe :: m a -> p a Source
orthogonal :: o a -> p a Source
translation :: v a -> p a Source
Fractional a => Projective a V3 M3 Ortho3 M4 Proj4 | |
Fractional a => Projective a V2 M2 Ortho2 M3 Proj3 |
class (AbelianGroup m, SquareMatrix m) => MatrixNorms a m where Source
:: m | |
-> a | the frobenius norm (= euclidean norm in the space of matrices) |
:: m | |
-> m | |
-> a | euclidean distance in the space of matrices |
:: m | |
-> a | (euclidean) operator norm (not implemented yet) |
Floating a => MatrixNorms a (M4 a) | |
Floating a => MatrixNorms a (M3 a) | |
Floating a => MatrixNorms a (M2 a) |
project :: (Fractional a, Vector a v, DotProd a v) => v a -> v a -> v a Source
project' :: (Vector a v, UnitVector a v u, Norm a v) => v a -> u a -> v a Source
Projects the first vector down to the hyperplane orthogonal to the second (unit) vector
projectUnsafe :: (Vector a v, DotProd a v) => v a -> v a -> v a Source
Direction (second argument) is assumed to be a unit vector!
flipNormal :: UnitVector a v n => n a -> n a Source
Since unit vectors are not a group, we need a separate function.
householder :: (Vector a v, UnitVector a v u, SquareMatrix (m a), Vector a m, Tensor (m a) (v a)) => u a -> m a Source
Householder matrix, see http://en.wikipedia.org/wiki/Householder_transformation. In plain words, it is the reflection to the hyperplane orthogonal to the input vector.
householderOrtho :: (Vector a v, UnitVector a v u, SquareMatrix (m a), Vector a m, Tensor (m a) (v a), Orthogonal a m o) => u a -> o a Source