Advertisement
Guest User

Untitled

a guest
Oct 25th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.73 KB | None | 0 0
  1. innerWallClockwise :: Float -> V2 Float -> [Point V2 Float] -> [V2 Float]
  2.  
  3. innerWallClockwise w acc (p : p' : p'' : ps) =
  4.  
  5. let v = p' .-. p
  6. v' = p'' .-. p'
  7. d2v = v' .-. v
  8. phi = atan2 (v ^. _y) (v ^. _x)
  9. rho = atan2 (v' ^. _y) (v' ^. _x)
  10. theta = phi + rho
  11. d2vtheta = atan2 (d2v ^. _y) (d2v ^. _x)
  12.  
  13. theta' = theta / 2 + if d2vtheta > 0 then pi / 2 else (-1) * pi / 2
  14. v''' = w *^ angle theta'
  15. v'''' = acc .+^ v'''
  16. in
  17. if ps == [] then [v''''] else v'''' : (innerWallClockwise w (acc .+^ v') (p' : p'' : (head ps) : (tail ps)))
  18.  
  19. let path=[P (V2 0 0), P(V2 0 5), P(V2 5 5), P (V2 5 (-5)), P (V2 0 (-5))]
  20.  
  21. innerWallClockwise 1 (V2 0 5) path
  22.  
  23. => [V2 0.70710677 4.2928934,V2 4.2928934 4.2928934,V2 4.2928934 (-4.2928934)]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement