Hacker News new | past | comments | ask | show | jobs | submit login

We were given that the lead ball and the wood ball were the same size. I am assuming that they are both spherical.

The drag force is 1/2 p Cd A v^2 where p is the density of the air, Cd is the coefficient of drag, A is the cross sectional area, and v is the velocity.

If both balls are spheres, Cd is the same for them (0.47). The air density is the same for both. The cross sectional area is that same. Hence, the two balls have the same drag force at the same velocity. Hence, the deceleration from drag is lower for the heavier ball.

Here's an example with a basketball and a bowling ball showing what happens: https://www.youtube.com/watch?v=mGZLuaJ5MOc

Note that you need quite a long drop to see a noticeable difference.

Below is a simple simulator that drops two spherical balls of the same size but different mass, and prints how far they have fallen and how fast they are going each second for the first 10 seconds. I'll give some results first, and then the simulator code if anyone wants to play with it.

Here are the results for a 4 cm diameter lead ball and a 4 cm diameter ping pong ball:

  0.0 (0.0, 0.01) (0.0, 0.01)
  1.0 (4.9, 9.79) (4.11, 6.99)
  2.0 (19.51, 19.38) (12.02, 8.39)
  3.0 (43.54, 28.63) (20.51, 8.54)
  4.0 (76.58, 37.37) (29.06, 8.55)
  5.0 (118.06, 45.5) (37.62, 8.56)
  6.0 (167.34, 52.94) (46.17, 8.56)
  7.0 (223.7, 59.66) (54.73, 8.56)
  8.0 (286.41, 65.64) (63.29, 8.56)
  9.0 (354.74, 70.91) (71.84, 8.56)
  10.0 (428.0, 75.5) (80.4, 8.56)
Numbers in each row are: time in seconds since drop, distance first ball has fallen (in meters), velocity of first ball (meters/second), and the distance and velocity of the second ball.

Here's a pair of 12 cm diameter balls one weighing 16 pounds (maximum weight for a bowling ball), and one about the weight of a basketball:

  0.0 (0.0, 0.01) (0.0, 0.01)
  1.0 (4.9, 9.76) (4.75, 9.2)
  2.0 (19.4, 19.18) (17.42, 15.59)
  3.0 (43.03, 27.97) (34.92, 19.0)
  4.0 (75.04, 35.91) (54.81, 20.56)
  5.0 (114.53, 42.9) (75.76, 21.23)
  6.0 (160.5, 48.88) (97.15, 21.51)
  7.0 (211.96, 53.89) (118.72, 21.62)
  8.0 (267.99, 58.02) (140.37, 21.67)
  9.0 (327.74, 61.37) (162.05, 21.69)
  10.0 (390.51, 64.06) (183.74, 21.69)
The simulator is just doing a simple linear simulation that assumes constant velocity and acceleration during between simulation steps. That's not super accurate, but it is good enough to show the physics.

Simulator code below. Set r to the radius in meters of your spheres. Set m1 and m2 to the masses of your two spheres, in kilograms.

  #!/usr/bin/env python3
  import math
  
  p = 1.225   # kg/m^3
  Cd = 0.47   # for sphere
  r = .12     # m
  
  m1 = 7.2    # kg  mass of 4 cm lead ball
  m2 = .625    # kg mass of 4 cm ping pong ball
  
  def drag(v):    # m/s
      # 1/2 p Cd A v^2
      return 1/2 * p * Cd * math.pi * r**2 * v**2
  
  def sim(m1, m2):
      y1, y2 = 0.0, 0.0   # m
      v1, v2 = 0.0, 0.0   # m/s
      dt = 0.001          # s
  
      for ms in range(0, 10001):
          y1 += v1 * dt
          y2 += v2 * dt
  
          v1 -= drag(v1) * dt / m1
          v2 -= drag(v2) * dt / m2
  
          v1 += 9.81 * dt
          v2 += 9.81 * dt
  
          if ms % 1000 == 0:
              print(ms/1000, (round(y1,2), round(v1,2)), (round(y2,2), round(v2,2)))
  
  sim(m1, m2)



I appreciate your earnestness, but running your code gives:

  0 (0.0, 0.01) (0.0, 0.01)
  1 (4.91, 9.82) (4.91, 9.82)
  2 (19.63, 19.63) (19.63, 19.63)
  3 (44.16, 29.44) (44.16, 29.44)
  4 (78.5, 39.25) (78.5, 39.25)
  5 (122.65, 49.06) (122.65, 49.06)
  6 (176.61, 58.87) (176.61, 58.87)
  7 (240.38, 68.68) (240.38, 68.68)
  8 (313.96, 78.49) (313.96, 78.49)
  9 (397.35, 88.3) (397.35, 88.3)
  10 (490.55, 98.11) (490.55, 98.11)


It's Python 3. You ran it with Python 2. In Python 2, 1/2 == 0. In Python 3, 1/2 == 0.5. That means that in the drag function, this expression:

  1/2 * p * Cd * math.pi * r**2 * v**2
always gives 0 on Python 2 because of that 1/2 factor.

If you want to run it on Python 2, either change the 1/2 in the drag function to 1./2 or 0.5, or add

  from __future__ import division
at the top to tell Python 2 you want to use the Python 3 division behavior.


Then I stand corrected. Thank you for being patient.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: