AC-Vector-2.3.2: Efficient geometric vectors and transformations.

Safe HaskellSafe-Infered

Data.Vector.Class

Description

General functions applicable to all vector types.

Synopsis

Documentation

type Scalar = DoubleSource

The type of vector field values.

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.

Methods

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.)

vpromote :: Scalar -> vSource

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.)

vlinear :: Vector v => Scalar -> v -> v -> vSource

Linearly interpolate between two points in space.

  • vlinear 0 a b = a
  • vlinear 1 a b = b
  • vlinear 0.5 a b would give a point exactly half way between a and b in a straight line.