jjant/linear-algebra/1.0.0

Mat3

type alias Mat3 =
{ m11 : Float
, m12 : Float
, m13 : Float
, m21 : Float
, m22 : Float
, m23 : Float
, m31 : Float
, m32 : Float
, m33 : Float
}

Create

identity : Mat3
fromRows : Vec3 -> Vec3 -> Vec3 -> Mat3

Create a matrix out of vectors representing its rows.

Operations

add : Mat3 -> Mat3 -> Mat3
mul : Mat3 -> Mat3 -> Mat3
invert : Mat3 -> Maybe Mat3
transpose : Mat3 -> Mat3

2D Transformations

rotate : Float -> Mat3
scale : Vec2 -> Mat3

Creates a 2D scaling matrix:

m =  Mat3.scale (vec2 2 3)


Mat3.transformPoint m (vec2 5 8) == vec2 10 24
Mat3.transformVector m (vec2 5 8) == vec2 10 24
translate : Vec2 -> Mat3

Projections

{ centerOfAttention : Vec2
, upDirection : Vec2
}
-> Mat3
{ width : Float
, height : Float
}
-> Mat3
{ width : Float
, height : Float
}
-> Mat3

Transforms clip space into viewport space.

--      Clip space
--
--                ^ +1
--                |
--                |
--                |
--   -1         y |           +1
--   <--------- (0,0) --------->
--                |  x
--                |
--                |
--                |
--                v -1
--
--
--
--
--
--      Viewport space
--                       width
--        (0,0)------------>
--          |
--          |
--          |
--          |
--          v
--        height
--
--

Apply matrices

transformPoint : Mat3 -> Vec2 -> Vec2

Transforms a point, applying scaling, rotation, and translation.

transformVector : Mat3 -> Vec2 -> Vec2

Transforms a vector, applying scaling and rotation, but not translation.

transform : Mat3 -> Vec3 -> Vec3

Transforms a general 3D vector.