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

Data.Vector.Class

Description

General function applicable to all vector types.

Synopsis

# Documentation

type Scalar = DoubleSource

The type of vector field values.

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

Instances

 Vector Vector1 Vector Vector2 Vector Vector3 Vector Vector4

(*|) :: 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.

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 :: (Num v, 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.