Safe Haskell | Safe-Infered |
---|
General functions applicable to all vector types.
- type Scalar = Double
- class BasicVector v where
- class (BasicVector v, Num v, Fractional v) => Vector v
- (*|) :: Vector v => Scalar -> v -> v
- (|*) :: Vector v => v -> Scalar -> v
- (|/) :: Vector v => v -> Scalar -> v
- (/|) :: Vector v => Scalar -> v -> v
- vdot :: Vector v => v -> v -> Scalar
- vmag :: Vector v => v -> Scalar
- vnormalise :: Vector v => v -> v
- vlinear :: Vector v => Scalar -> v -> v -> v
Documentation
class BasicVector v whereSource
All vector types belong to this class. Aside from vpack
and vunpack
, these methods aren't especially useful to end-users; they're used internally by the vector arithmetic implementations.
vmap :: (Scalar -> Scalar) -> v -> vSource
Apply a function to all vector fields.
vzip :: (Scalar -> Scalar -> Scalar) -> v -> v -> vSource
Zip two vectors together field-by-field using the supplied function (in the style of Data.List.zipWith
).
vfold :: (Scalar -> Scalar -> Scalar) -> v -> ScalarSource
Reduce a vector down to a single value using the supplied binary operator. The ordering in which this happens isn't guaranteed, so the operator should probably be associative and commutative.
vpack :: [Scalar] -> Maybe vSource
Pack a list of values into a vector. Extra values are ignored, too few values yields Nothing
.
vunpack :: v -> [Scalar]Source
Unpack a vector into a list of values. (Always succeeds.)
Convert a Scalar
to a vector (with all components the same).
class (BasicVector v, Num v, Fractional v) => Vector v Source
Dummy class that enables you to request a vector in a type signature without needing to explicitly list Num
or Fractional
as well.
(*|) :: Vector v => Scalar -> v -> vSource
Scale a vector (i.e., change its length but not its direction). This operator has the same precedence as the usual (*)
operator.
The (*|)
and (|*)
operators are identical, but with their argument flipped. Just remember that the '|
' denotes the scalar part.
(|*) :: Vector v => v -> Scalar -> vSource
Scale a vector (i.e., change its length but not its direction). This operator has the same precedence as the usual (*)
operator.
The (*|)
and (|*)
operators are identical, but with their argument flipped. Just remember that the '|
' denotes the scalar part.
(|/) :: Vector v => v -> Scalar -> vSource
Scale a vector (i.e., change its length but not its direction). This operator has the same precedence as the usual (/)
operator.
The (|)@ and @(|)
operators are identical, but with their argument flipped. Just remember that the '|
' denotes the scalar part.
(/|) :: Vector v => Scalar -> v -> vSource
Scale a vector (i.e., change its length but not its direction). This operator has the same precedence as the usual (/)
operator.
The (|)@ and @(|)
operators are identical, but with their argument flipped. Just remember that the '|
' denotes the scalar part.
vdot :: Vector v => v -> v -> ScalarSource
Take the dot product of two vectors. This is a scalar equal to the cosine of the angle between the two vectors multiplied by the length of each vectors.
vmag :: Vector v => v -> ScalarSource
Return the length or magnitude of a vector. (Note that this involves a slow square root operation.)
vnormalise :: Vector v => v -> vSource
Normalise a vector. In order words, return a new vector with the same direction, but a length of exactly one. (If the vector's length is zero or very near to zero, the vector is returned unchanged.)