simple-vec3-0.1.0.1: Three-dimensional vectors of doubles with basic operations

Safe HaskellSafe-Inferred

Data.Vec3.Class

Synopsis

Documentation

class Vec3 v whereSource

Three-dimensional vector, with an associated matrix type.

Associated Types

data Matrix v Source

Associated type for 3×3 matrix.

Methods

origin :: vSource

Origin point (0, 0, 0).

fromXYZ :: (Double, Double, Double) -> vSource

Construct a new vector from components.

toXYZ :: v -> (Double, Double, Double)Source

Deconstruct a vector into components.

zipWith :: (Double -> Double -> Double) -> v -> v -> vSource

Zip two vectors elementwise.

(<+>) :: v -> v -> vSource

Add two vectors.

(<->) :: v -> v -> vSource

Subtract two vectors.

(><) :: v -> v -> vSource

Cross product.

(.^) :: v -> Double -> vSource

Scale a vector.

(.*) :: v -> v -> DoubleSource

Dot product.

norm :: v -> DoubleSource

Euclidean norm of a vector.

normalize :: v -> vSource

Produce unit vector with the same direction as the original one.

distance :: v -> v -> DoubleSource

Distance between two points.

invert :: v -> vSource

Invert the direction of a vector.

fromRows :: (v, v, v) -> Matrix vSource

Construct a new matrix from rows.

toRows :: Matrix v -> (v, v, v)Source

Deconstruct a matrix into rows.

dotM :: v -> v -> Matrix v -> DoubleSource

Generic vector dot product.

Multiply the transpose of the first vector by the given matrix, then multiply the result by the second vector.

                     [ a11  a12  a13 ]   [ v2x ]
                     [               ]   [     ]
 [ v1x  v1y  v1z ] . [ a21  a22  a23 ] . [ v2y ] = s
                     [               ]   [     ]
                     [ a31  a32  a33 ]   [ v2z ]

mxv :: Matrix v -> v -> vSource

Multiply a matrix and a vector.

 [ a11  a12  a13 ]   [ v2x ]   [ rx ]
 [               ]   [     ]   [    ]
 [ a21  a22  a23 ] . [ v2y ] = [ ry ]
 [               ]   [     ]   [    ]
 [ a31  a32  a33 ]   [ v2z ]   [ rz ]

diag :: Double -> Matrix vSource

Build a diagonal matrix from a number d.

 [ d  0  0 ]
 [         ]
 [ 0  d  0 ]
 [         ]
 [ 0  0  d ]

vxv :: v -> v -> Matrix vSource

Transpose a vector and multiply it by another vector, producing a matrix.

 [ v1x ]                       [ r11  r12  r13 ]
 [     ]                       [               ]
 [ v1y ] . [ v2x  v2y  v2z ] = [ r21  r22  r23 ]
 [     ]                       [               ]
 [ v1z ]                       [ r31  r32  r33 ]

addM :: Matrix v -> Matrix v -> Matrix vSource

Add two matrices.