Advertisement
Guest User

Untitled

a guest
Oct 21st, 2019
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1. (* type used *)
  2. type t_point = {x : float; y : float};;
  3. type t_vector = {x : float; y : float};;
  4. type t_ball = {position : t_vector; speed : t_vector};;
  5.  
  6. let sum_vector(vector_1, vector_2 : t_vector * t_vector) : t_vector =
  7. {x = vector_1.x +. vector_2.x; y = vector_1.y +. vector_2.y}
  8. ;;
  9.  
  10. let init_ball(height, speed : float * t_vector) : t_ball =
  11. let init_point : t_vector = {x = 0.; y = height} in {position = init_point; speed = speed}
  12. ;;
  13.  
  14. let gravity : t_vector = {x = 0.; y = -9.80665};;
  15.  
  16. let rec compute_next_speed(ball, t : t_ball * int) : t_vector =
  17. if t = 0
  18. then ball.speed
  19. else
  20. sum_vector(compute_next_speed(ball, t-1), gravity)
  21. ;;
  22.  
  23. let ball : t_ball = init_ball(10., {x = 5.; y = 50.});;
  24.  
  25. let rec compute_next_pos(ball , t: t_ball * int) : t_vector =
  26. if t = 0
  27. then ball.position
  28. else
  29. let speed1 : t_vector = compute_next_speed(ball, t-1) in
  30. let speed2 : t_vector = compute_next_speed(ball, t) in
  31. sum_vector(compute_next_pos(ball, t-1), {x = (speed1.x +. speed2.x) /. 2.; y = (speed1.y +. speed2.y) /. 2.})
  32. ;;
  33.  
  34. #trace compute_next_speed;;
  35. #trace compute_next_pos;;
  36.  
  37. compute_next_pos(ball, 4);;
  38.  
  39. let rec compute_end_point(ball, t : t_ball * int) : t_vector =
  40. let pos : t_vector = compute_next_pos(ball, t) in
  41. if pos.y < 0.
  42. then compute_next_pos(ball, t)
  43. else
  44. compute_end_point(ball, t+1)
  45. ;;
  46.  
  47. compute_end_point(ball, 0);;
  48. Écrivez un message...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement