Advertisement
Guest User

Untitled

a guest
Jan 12th, 2022
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.96 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. import math
  3.  
  4. g = 9.80665 # standard gravity (m/s^2)
  5. p = 1.225   # density of 15°C air at sea level and (kg/m^3)
  6.  
  7. class Ball:
  8.     def __init__(self, m, A, Cd):
  9.         self.m = m      # mass (kg)
  10.         self.A = A      # cross sectional area (m^2)
  11.         self.Cd = Cd    # coefficient of drag
  12.         self.z = 0      # distance fallen
  13.         self.v = 0      # velocity
  14.         self.p = p      # density of fluid
  15.         self.g = g      # gravity
  16.         self.vt = math.sqrt(2 * g * self.m / self.p / self.Cd / self.A)
  17.  
  18.     def drag(self, v):
  19.         # 1/2 p Cd A v^2
  20.         return 0.5 * self.p * self.Cd * self.A * v**2
  21.  
  22.     def step(self,dt):
  23.         a = self.g - self.drag(self.v) / self.m
  24.         self.z += self.v * dt + 0.5 * a * dt**2
  25.         self.v += a * dt
  26.  
  27.     def reset(self):
  28.         self.z = 0
  29.         self.v = 0
  30.  
  31. def basketball(): return Ball(0.620, 0.750**2/4/math.pi, 0.47)
  32. def bowling_ball(): return Ball(7.26, 0.6859**2/4/math.pi, 0.47)
  33. def massive_sphere(r,m): return Ball(m, math.pi * r**2, 0.47)
  34. def dense_sphere(r,d): return massive_sphere(r, d * 4 * math.pi * r**3 / 3)
  35. def lead_sphere(r): return dense_sphere(r, 11340)
  36. def pine_sphere(r): return dense_sphere(r, 500)
  37. def pingpong_ball(): return Ball(0.0027, 0.02**2 * math.pi, 0.47)
  38. def ant(): return Ball(0.000005, 0.00003, 0.8)
  39. def rat(): return Ball(0.3, 0.04, 0.8)
  40. def cat(): return Ball(4.0, 0.1, 0.8)
  41. def person(): return Ball(70.0, 0.64, 0.6)
  42. def phone(): return Ball(.174, .14*.07, 2.1)
  43.  
  44. def sim(balls):
  45.     dt = 0.001
  46.     for ms in range(10001):
  47.         if ms % 100 == 0:
  48.             out = [ms/1000]
  49.             for b in balls:
  50.                 pt = 100 * b.v / b.vt
  51.                 out.append((round(b.z,2), round(b.v,2), round(pt,1)))
  52.             print(out)
  53.         for b in balls:
  54.             b.step(dt)
  55.  
  56. balls = [phone(), ant(), rat(), cat(), person(), bowling_ball()]
  57. sim(balls)
  58. x = person()
  59. print(x.vt)
  60. x = phone()
  61. print(x.vt)
  62.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement