Activity Information

Learning Goals

  • Students will use their understanding of energy and free fall to manipulate difference scenarios related to bungee jumping

Prior Knowledge Required

  • Conservation of Energy
  • Hooke's Law
    • $F=-kx$
  • Kinematics

Code Manipulation

  • Interpret minimally working code
  • Add to preexisting code
  • Create new code to model scenario

—-

Activity

Handout

Bungee Jumping

Mr. Spencer's physics class wants to go bungee jumping. The closet spot that Western will pay for them to go is the Parma Adventure Park. Below is some information from their website:

Looking for the best bungee jumping in Spring Arbor? The Parma Adventure Park has an exciting option for your favorite adrenaline junkee. Get your maximum rush at our relatively reliable Freefall Bungee Jump Tower. Prepare yourself for that impending, gut-wrenching feeling as you climb to the top, and then fall through our trap door for an exhilarating free fall.
Our tower, harnesses, and gear are specially engineered with a safety record of 98%! Our staff will assist you in making his the experience of a lifetime, whether you need some calming reassurance or the big “1-2-3-Go!” Feel the thrill as you hurtle towards the ground below, only to stop right before you reach the ground*
*Parma Adventure Park is not responsible for accidents resulting from patrons giving incorrect information

The tower is 25 meters high. Before you climb the steps to the top, everyone needs the right bungee cord for them. The bungee cords are all the same length, but some stretch more easily than others. Develop a method for determining which cord to assign to each member of your group using the following minimally working program.

Challenge activity: The highest numbered bungee cord is not enough for your chaperone. The staff wants to attach two different bungee cords to his harness, one on each side. Modify your computer model to include a second bungee cord and use it to develop a method for determine which two bungee cords the staff needs to use.

Code

Link

  1. GlowScript 2.7 VPython
  2. # Set up display window
  3. scene.width = 500
  4. scene.height = 400
  5. scene.background=color.white
  6. scene.center = vec(0, 20, 0)
  7.  
  8. # Intial information: Enter your assigned height
  9. #h=int(prompt("What is your assinged height?"))
  10. #height = vec(0, h ,0)
  11. height = vec(0, 25, 0)
  12. pivot = height + vec(0,10,0)
  13.  
  14.  
  15. # Create a ceiling, a person, a floor, the rocks and a spring.
  16. ceiling=box(size=vec(10,2,10), color=color.magenta)
  17. ceiling.pos = pivot + vec(0, ceiling.size.y/2,0)
  18.  
  19. person=sphere(radius=2, velocity = vec(0,0,0), color=color.yellow)
  20. person.pos = height + vec(0,person.radius,0)
  21.  
  22. floor=box(size=vec(10,1,10), color=color.magenta)
  23. floor.pos=vec(0,person.pos.y-person.radius-(floor.size.y/2),0)
  24.  
  25. rocks=box(pos=vec(0,-1,0), size=vec(10,2,10), color=color.gray(.5))
  26.  
  27. Spring=helix(pos=pivot, axis=person.pos-pivot, coils=10, radius=2)
  28. lengthSpring = Spring.axis #initial length of the spring (fixed)
  29.  
  30.  
  31. # Define parameters
  32. mPerson = 70
  33. g = vec(0,-9.81,0)
  34. t=0
  35. tf = 20
  36. dt = 0.01
  37.  
  38. #ENERGY
  39. #How do energy concepts help us know which bungee cord to use?
  40.  
  41. #Define the spring constant
  42.  
  43.  
  44. ####################EXTRA: Create a force vector########################
  45. # FnetArrow = arrow(pos=person.pos, axis=vec(0, 0, 0), color=color.red)#
  46. ########################################################################
  47.  
  48. ############EXTRA: Create an energy graph#####################
  49. # energyGraph = graph(xtitle='time (s)', ytitle='energy (J)')#
  50. # TotalGraph= gcurve(color=color.black, label='Total Energy')#
  51. ##############################################################
  52.  
  53. # Set up a disappearing floor for the trapdoor
  54. scene.pause('Click to remove floor')
  55. floor.visible = False
  56.  
  57.  
  58. # Dropping the person once the floor is gone
  59. while True:
  60. rate(100)
  61.  
  62. #FORCES
  63. #Define the forces acting on the person (Remember Hooke's Law)
  64. #Define the net force
  65.  
  66. # MOVEMENT
  67. # Update the person's velocity
  68. # Update the person's position
  69. Spring.axis = person.pos-pivot # Update the length of the spring
  70.  
  71. # Change the person's color to red if they hit the rocks
  72. if person.pos.y< (rocks.pos.y+.99+person.radius):
  73. person.color=vec(1,0,0)
  74.  
  75. # Update the clock
  76. t = t + dt
  77.  
  78. #####EXTRA: FORCE VECTORS######
  79. # FnetArrow.pos = vec(0,0,0) #
  80. # FnetArrow.axis = vec(0,0,0) #
  81. ###############################
  82.  
  83. ##EXTRA: ENERGY GRAPHS###
  84. # TotalGraph.plot(t,TE) #
  85. #########################
  86.  
  87. #Have the computer print the height of the person at the end of the program (won't happen until the while loop ends)
  88. #print("h =", (person.pos.y-person.radius))
  89. #Compared to the floor's surface
  90. #print("floor = ", floor.pos+1)

Answer Key

Code

, Link ,

  1. ,
  2. GlowScript 2.7 VPython
  3. # Set up display window
  4. scene.width = 500
  5. scene.height = 400
  6. scene.background=color.white
  7. scene.center = vec(0, 20, 0)
  8.  
  9.  
  10. # Intial information: Enter your assigned height
  11. #h=int(prompt("What is your assinged height?"))
  12. #height = vec(0, h ,0)
  13. height = vec(0, 25, 0)
  14. pivot = height + vec(0,10,0)
  15.  
  16.  
  17. # Create a ceiling, a person, a floor, the rocks and a spring.
  18. ceiling=box(size=vec(10,2,10), color=color.magenta)
  19. ceiling.pos = pivot + vec(0, ceiling.size.y/2,0)
  20.  
  21. person=sphere(radius=2, velocity = vec(0,0,0), color=color.yellow)
  22. person.pos = height + vec(0,person.radius,0)
  23.  
  24. floor=box(size=vec(10,1,10), color=color.magenta)
  25. floor.pos=vec(0,person.pos.y-person.radius-(floor.size.y/2),0)
  26.  
  27. rocks=box(pos=vec(0,-1,0), size=vec(10,2,10), color=color.gray(.5))
  28.  
  29. Spring=helix(pos=pivot, axis=person.pos-pivot, coils=10, radius=person.radius)
  30. lengthSpring = Spring.axis #initial length of the spring (fixed)
  31.  
  32.  
  33. # Define parameters
  34. mPerson = 70
  35. g = vec(0,-9.81,0)
  36. t=0
  37. tf = 20
  38. dt = 0.01
  39.  
  40. #Use energy to determine the spring constant
  41. Egrav = abs(mPerson*g.y*height.y)
  42. kSpring = abs(2*Egrav/(height.y**2))
  43. #kSpring = 47
  44.  
  45.  
  46.  
  47. #Create the force vectors
  48. FgravArrow = arrow(pos=person.pos, axis=vec(-2,0,0), color=color.red)
  49. FspringArrow = arrow(pos=person.pos+vec(2, 0, 0), color=color.blue)
  50. FnetArrow = arrow(pos=person.pos, axis=vec(0, 0, 0), color=color.black)
  51.  
  52. #Energy graph showing kinetic energy (max at eq) and spring potential (0 at eq)
  53. energyGraph = graph(xtitle='time (s)', ytitle='energy (J)')
  54. KineticGraph = gcurve(color=color.green, label='Kinetic')
  55. SpringGraph = gcurve(color=color.blue, label='Spring Potential')
  56. GravGraph = gcurve(color=color.red, label='Grav. Potential')
  57. TotalGraph= gcurve(color=color.black, label='Total Energy')
  58.  
  59.  
  60.  
  61. # Set up a disappearing floor for the trapdoor
  62. scene.pause('Click to remove floor')
  63. floor.visible = False
  64.  
  65.  
  66. # Dropping the person once the floor is gone
  67. while t<tf:
  68. #while person.velocity.y <=0:
  69. rate(200)
  70.  
  71. #Define the forces so they update as time goes on
  72. Fgrav = mPerson * g
  73. Fspring = -kSpring * (Spring.axis-lengthSpring) #Fspring = -k * delta x
  74. Fnet = Fspring + Fgrav
  75.  
  76. # Movement - update the velocity of the person, the position of the person and the length of the spring
  77. person.velocity = person.velocity + (Fnet/mPerson)*dt
  78. person.pos = person.pos + person.velocity*dt
  79. Spring.axis = person.pos-pivot
  80.  
  81. # Change the person's color to red if they hit the rocks
  82. if person.pos.y< (rocks.pos.y+.99+person.radius):
  83. person.color=vec(1,0,0)
  84.  
  85. # Update the clock
  86. t = t + dt
  87.  
  88. #Show the force vectors
  89. FgravArrow.pos = person.pos+vec(-2,0,0)
  90. FgravArrow.axis = Fgrav/(1e2)
  91. FspringArrow.pos = person.pos+vec(2, 0, 0)
  92. FspringArrow.axis = Fspring/(1e2)
  93. FnetArrow.pos = person.pos
  94. FnetArrow.axis = Fnet/(1e2)
  95.  
  96. #Calculate the energies in each moment
  97. KE=0.5*mPerson*mag(person.velocity)**2
  98. SPE=0.5*kSpring*mag(Spring.axis-lengthSpring)**2
  99. GPE=abs(mPerson*g.y*(person.pos.y-person.radius))
  100. TE=KE+SPE+GPE
  101.  
  102. #Graph the energies
  103. KineticGraph.plot(t, KE)
  104. SpringGraph.plot(t,SPE)
  105. GravGraph.plot(t,GPE)
  106. TotalGraph.plot(t,TE)
  107.  
  108.  
  109.  
  110. #Have the computer print the height of the person at the end of the program (won't happen until the while loop ends)
  111. #print("h =", (person.pos.y-person.radius))
  112. #Compared to the rocks's surface
  113. #print("rocks = ", rocks.pos.y+1)

Challenge Activity Code

  1. GlowScript 2.7 VPython
  2. # Set up display window
  3. scene.width = 500
  4. scene.height = 400
  5. scene.background=color.white
  6. scene.center = vec(0, 20, 0)
  7.  
  8. #Some initial information
  9. height = vec(0, 25, 0) #specifying the drop height
  10. pivot = height + vec(0,6,0) #pivot is top of spring
  11.  
  12. # Create a spring, a person, a ceiling, a floor and rocks
  13. # origin is located on surface of the rocks
  14. # The following statements define the shape, size and color of the person, ceiling, floor, and rocks
  15. ceiling=box(size=vec(10,2,10), color=color.magenta)
  16. ceiling.pos = pivot + vec(0, ceiling.size.y/2,0)
  17. person=sphere(radius=2, velocity = vec(0,0,0), color=color.yellow)
  18. person.pos = height + vec(0,person.radius,0)
  19. floor=box(size=vec(10,1,10), color=color.magenta)
  20. floor.pos=vec(0,person.pos.y-person.radius-(floor.size.y/2),0)
  21. rocks=box(pos=vec(0,0,0), size=vec(10,2,10), color=color.gray(.5))
  22. Spring=helix(pos=pivot, axis=person.pos-pivot, coils=10, radius=2)
  23. lengthSpring = Spring.axis #initial length of the spring (fixed)
  24.  
  25. # Define parameters
  26. #input mass of person
  27. mPerson = 70
  28. #g is acceleration due to gravity
  29. g = vec(0,-9.81,0)
  30. # t is time, tf is time final
  31. #this statement initializes the time and defines the increment for the loop
  32. t=0
  33. tf = 20
  34. dt = 0.01
  35.  
  36. #Add code for Egrav= abs(mgh)
  37. Egrav = abs(mPerson*g.y*height.y)
  38. #Determine kSpring value or make an equation for kSpring in terms of Egrav and height
  39. kSpring = abs(2*Egrav/(height.y**2))
  40.  
  41. #Energy graph showing kinetic energy (max at eq) and spring potential (0 at eq)
  42. energyGraph = graph(xtitle='time (s)', ytitle='energy (J)')
  43. KineticGraph = gcurve(color=color.green, label='Kinetic')
  44. SpringGraph = gcurve(color=color.blue, label='Spring Potential')
  45. GravGraph = gcurve(color=color.red, label='Grav. Potential')
  46. TotalGraph= gcurve(color=color.black, label='Total Energy')
  47.  
  48. #Show the force vector
  49. FnetArrow = arrow(pos=person.pos, axis=vec(0, 0, 0), color=color.black)
  50.  
  51. #Add a force vector for Fgrav and Fspring
  52. #hint- off set the position of the arrows by adding or subtracting a vector
  53. FgravArrow = arrow(pos=person.pos - vec(2,0,0), axis=vec(0, 0, 0), color=color.red)
  54. FspringArrow = arrow(pos=person.pos + vec(2,0,0), axis=vec(0, 0, 0), color=color.blue)
  55.  
  56. #disappearing floor
  57. scene.pause('Click to remove floor')
  58. floor.visible = False
  59.  
  60. #Dropping the person
  61. while True:
  62. rate(100)
  63.  
  64. #Define the forces
  65. Fgrav = mPerson * g #F=mg
  66. Fspring = -kSpring * (Spring.axis-lengthSpring) #Fspring = -k * delta x
  67. Fnet = Fspring + Fgrav
  68.  
  69. #movement - update the velocity of the person, the position of the person and the length of the spring
  70. person.velocity = person.velocity + (Fnet/mPerson)*dt
  71. person.pos = person.pos + person.velocity*dt
  72. Spring.axis = person.pos-pivot
  73.  
  74. t = t + dt
  75.  
  76. #Input Energy Equations
  77. #KE hint- mag( ) to make a vector a scalar
  78. #SPE hint- mag( ) to make a vector a scalar
  79. #SPE hint- look at lines 37 and 85 to determine delta x
  80. #GPE hint- take absolute value, h of person
  81. #Total Energy
  82.  
  83. KE=0.5*mPerson*mag(person.velocity)**2
  84. SPE=0.5*kSpring*mag(Spring.axis-lengthSpring)**2
  85. GPE=abs(mPerson*g.y*(person.pos.y-person.radius))
  86. TE=KE+SPE+GPE
  87.  
  88. KineticGraph.plot(t, KE)
  89. SpringGraph.plot(t,SPE)
  90. GravGraph.plot(t,GPE)
  91. TotalGraph.plot(t,TE)
  92.  
  93. #Net force arrow based on Fnet and scale factor
  94. FnetArrow.pos = person.pos
  95. FnetArrow.axis = Fnet/(1e2)
  96.  
  97. #Force arrows for Fgrav and Fspring
  98. FgravArrow.pos = person.pos - vec(2,0,0)
  99. FgravArrow.axis = Fgrav/(1e2)
  100. FspringArrow.pos = person.pos + vec(2,0,0)
  101. FspringArrow.axis = Fspring/(1e2)
  102.  
  103. #Add if statement so the person's color changes when they hit the rocks
  104. if person.pos.y< (rocks.pos.y-person.radius):
  105. person.color=vec(1,0,0)

See Also

  • repository/bungee_jump.txt
  • Last modified: 2021/02/16 19:00
  • by porcaro1