jjant / linear-algebra / Mat3


type alias Mat3 =
{ m11 : Basics.Float
, m12 : Basics.Float
, m13 : Basics.Float
, m21 : Basics.Float
, m22 : Basics.Float
, m23 : Basics.Float
, m31 : Basics.Float
, m32 : Basics.Float
, m33 : Basics.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 : Basics.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

lookAt : { centerOfAttention : Vec2, upDirection : Vec2 } -> Mat3

orthographic : { width : Basics.Float, height : Basics.Float } -> Mat3

viewport : { width : Basics.Float, height : Basics.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.