From 17a58e0c4c67f27d87635bf1b2ca50fb11795ad3 Mon Sep 17 00:00:00 2001 From: Joris Guyonvarch Date: Sat, 7 Mar 2015 15:12:02 +0100 Subject: Organizing source code with subdirectories --- src/Utils/Physics.elm | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/Utils/Physics.elm (limited to 'src/Utils/Physics.elm') diff --git a/src/Utils/Physics.elm b/src/Utils/Physics.elm new file mode 100644 index 0000000..751af6c --- /dev/null +++ b/src/Utils/Physics.elm @@ -0,0 +1,46 @@ +module Utils.Physics + ( getNewPosAndSpeed + , getMove + , getWaveMove + ) where + +import Model.Vec2 (..) + +getNewPosAndSpeed : Float -> Vec2 -> (Float -> Float) -> (Vec2, Vec2) -> (Vec2, Vec2) +getNewPosAndSpeed dt dir computeSpeed (pos, speed) = + let move = getMove (computeSpeed dt) dir + acc = getAcc move speed + newPos = getNewPos dt acc speed pos + newSpeed = getNewSpeed dt acc speed + in ( newPos + , newSpeed + ) + +getMove : Float -> Vec2 -> Vec2 +getMove speed dir = + if (isNull dir) + then {x = 0, y = 0} + else + let angle = atan2 dir.y dir.x + in { x = speed * cos angle + , y = speed * sin angle + } + +getWaveMove : Float -> Vec2 -> Float -> Float -> Vec2 +getWaveMove speed dir amplitude period = + let move = getMove speed dir + perpendMove = + getMove + (amplitude * (sin ((norm move) / period))) + (clockwiseRotate90 move) + in move `add` perpendMove + +getAcc : Vec2 -> Vec2 -> Vec2 +getAcc move speed = (move `div` 300) `sub` (speed `div` 300) + +getNewPos : Float -> Vec2 -> Vec2 -> Vec2 -> Vec2 +getNewPos dt acc speed pos = + ((dt^2 / 2) `mul` acc) `add` ((dt `mul` speed) `add` pos) + +getNewSpeed : Float -> Vec2 -> Vec2 -> Vec2 +getNewSpeed dt acc speed = add (mul dt acc) speed -- cgit v1.2.3