module Model.Vec2 exposing ( Vec2 , add , sub , mul , div , norm , clockwiseRotate90 , isNull , originVec ) type alias Vec2 = { x : Float , y : Float } add : Vec2 -> Vec2 -> Vec2 add v1 v2 = { x = v1.x + v2.x , y = v1.y + v2.y } sub : Vec2 -> Vec2 -> Vec2 sub v1 v2 = { x = v1.x - v2.x , y = v1.y - v2.y } mul : Float -> Vec2 -> Vec2 mul m v = { x = m * v.x , y = m * v.y } div : Vec2 -> Float -> Vec2 div v d = { x = v.x / d , y = v.y / d } norm : Vec2 -> Float norm v = sqrt(v.x ^ 2 + v.y ^ 2) clockwiseRotate90 : Vec2 -> Vec2 clockwiseRotate90 v = { x = -v.y , y = v.x } isNull : Vec2 -> Bool isNull v = (v.x == 0) && (v.y == 0) originVec : Vec2 originVec = { x = 0, y = 0 }