 # Projectile Guessing!

May 11th, 2021
1,190
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. # From "Programming for Computations, (Svein Linge, Hans Petter Langtangen 2018)."
2.
3. """
4. Module for computing vertical motion
5. characteristics for a projectile.
6. """
7. def y(v0, t):
8.     """
9.    Compute vertical position at time t, given the initial vertical
10.    velocity v0. Assume negligible air resistance.
11.    """
12.     g = 9.81
13.     return v0*t - 0.5*g*t**2
14.
15. def time_of_flight(v0):
16.     """
17.    Compute time in the air, given the initial vertical
18.    velocity v0. Assume negligible air resistance.
19.    """
20.     g = 9.81
21.     return 2*v0/g
22.
23. def max_height(v0):
24.     """
25.    Compute maximum height reached, given the initial vertical
26.    velocity v0. Assume negligible air resistance.
27.    """
28.     g = 9.81
29.     return v0**2/(2*g)
30.
31. def application():
32.     import numpy as np
33.     import matplotlib.pyplot as plt
34.     import sys
35.     print("""This program computes vertical motion characteristics for a
36.    projectile. Given the intial vertical velocity, it computes height
37.    (as it develops with time), maximum height reached, as well as time
38.    of flight.""")
39.
40.     try:
41.         v_initial = float(input('Give the initial velocity: '))
42.     except:
43.         print('You must give a valid number!')
44.         sys.exit(1)
45.
46.     H = max_height(v_initial)
47.     T = time_of_flight(v_initial)
48.     print('Maximum height: {:g} m, \nTime of flight: {:g} s'.format(H, T))
49.
50.     # compute and plot position as function of time
51.     dt = 0.001 # just pick a "small" time step
52.     N = int(T/dt) # number of time steps
53.     t = np.linspace(0, N*dt, N+1)
54.     position = y(v_initial, t) # compute all positions (over T)
55.     plt.plot(t, position, 'b--')
56.     plt.xlabel('Time (s)')
57.     plt.ylabel('Vertical position (m)')
58.     plt.show()
59.     return
60.
61. if __name__ == '__main__':
62.     application()
RAW Paste Data