Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
repository:bungee_jump [2020/11/15 21:34]
porcaro1 created
repository:bungee_jump [2021/03/31 23:13] (current)
porcaro1
Line 15: Line 15:
 ====Activity==== ====Activity====
 ===Handout=== ===Handout===
 +
 +{{ :​repository:​bungeejump1.png?​nolink&​600|}}
 +
 ** Bungee Jumping **  ** 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: 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. >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.
Line 25: Line 29:
 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. 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===-+ 
 +===Code=== 
 +[[https://​www.glowscript.org/#/​user/​porcaro1/​folder/​RepositoryPrograms/​program/​BungeeJump-Incomplete| Link]]
 <code Python [enable_line_numbers="​true"​]>​ <code Python [enable_line_numbers="​true"​]>​
 +GlowScript 2.7 VPython
 +# Set up display window
 +scene.width = 500
 +scene.height = 400
 +scene.background=color.white
 +scene.center = vec(0, 20, 0)
 +
 +# Intial information:​ Enter your assigned height
 +#​h=int(prompt("​What is your assinged height?"​))
 +#height = vec(0, h ,0)
 +height = vec(0, 25, 0)
 +pivot = height + vec(0,10,0)
 +
 +
 +# Create a ceiling, a person, a floor, the rocks and a spring.
 +ceiling=box(size=vec(10,​2,​10),​ color=color.magenta)
 +ceiling.pos = pivot + vec(0, ceiling.size.y/​2,​0)
 +
 +person=sphere(radius=2,​ velocity = vec(0,0,0), color=color.yellow)
 +person.pos = height + vec(0,​person.radius,​0)
 +
 +floor=box(size=vec(10,​1,​10),​ color=color.magenta)
 +floor.pos=vec(0,​person.pos.y-person.radius-(floor.size.y/​2),​0)
 +
 +rocks=box(pos=vec(0,​-1,​0),​ size=vec(10,​2,​10),​ color=color.gray(.5))
 +
 +Spring=helix(pos=pivot,​ axis=person.pos-pivot,​ coils=10, radius=2)
 +lengthSpring = Spring.axis #initial length of the spring (fixed)
 +
 +
 +# Define parameters
 +mPerson = 70
 +g = vec(0,​-9.81,​0)
 +t=0
 +tf = 20
 +dt = 0.01
 +
 +#ENERGY
 +#How do energy concepts help us know which bungee cord to use?
 +
 +#Define the spring constant
 +
 +
 +####################​EXTRA:​ Create a force vector########################​
 +# FnetArrow = arrow(pos=person.pos,​ axis=vec(0, 0, 0), color=color.red)#​
 +########################################################################​
 +
 +############​EXTRA:​ Create an energy graph#####################​
 +# energyGraph = graph(xtitle='​time (s)', ytitle='​energy (J)')#
 +# TotalGraph= gcurve(color=color.black,​ label='​Total Energy'​)#​
 +##############################################################​
 +
 +# Set up a disappearing floor for the trapdoor
 +scene.pause('​Click to remove floor'​)
 +floor.visible = False
 +
 +
 +# Dropping the person once the floor is gone
 +while True:
 +  rate(100)
 +  ​
 +  #FORCES
 +  #Define the forces acting on the person (Remember Hooke'​s Law)
 +  #Define the net force 
 +
 +  # MOVEMENT
 +  # Update the person'​s velocity
 +  # Update the person'​s position
 +  Spring.axis = person.pos-pivot # Update the length of the spring
 +  ​
 +  # Change the person'​s color to red if they hit the rocks
 +  if person.pos.y<​ (rocks.pos.y+.99+person.radius):​
 +    person.color=vec(1,​0,​0)
 +  ​
 +  # Update the clock
 +  t = t + dt
 +
 +  #####EXTRA: FORCE VECTORS######​
 +  # FnetArrow.pos = vec(0,​0,​0) ​ #
 +  # FnetArrow.axis = vec(0,0,0) #
 +  ###############################​
 +  ​
 +  ##EXTRA: ENERGY GRAPHS###
 +  # TotalGraph.plot(t,​TE) #
 +  #########################​
 + 
 +#Have the computer print the height of the person at the end of the program (won't happen until the while loop ends)  ​
 +#​print("​h =", (person.pos.y-person.radius))
 +#Compared to the floor'​s surface
 +#​print("​floor = ", floor.pos+1)
 +
 </​code>​ </​code>​
 ---- ----
 ====Answer Key==== ====Answer Key====
-===Handout===+{{ :​repository:​bungeejump2.png?​nolink&​600 |}}
 ===Code=== ===Code===
-<code Python [enable_line_numbers="​true",​ highlight_lines_extra=""​]>​+[[https://​www.glowscript.org/#/​user/​porcaro1/​folder/​RepositoryPrograms/​program/​BungeeJump-Solution | Link]] 
 +<code Python [enable_line_numbers="​true",​ highlight_lines_extra=,"40,​41,​47,​48,​49,​52,​53,​54,​55,​56,​66,​71,​72,​73,​76,​77,​88,​89,​90,​91,​92,​93,​96,​97,​98,​99,​102,​103,​104,​105"]>
 +GlowScript 2.7 VPython 
 +# Set up display window 
 +scene.width = 500 
 +scene.height = 400 
 +scene.background=color.white 
 +scene.center = vec(0, 20, 0) 
 + 
 + 
 +# Intial information:​ Enter your assigned height 
 +#​h=int(prompt("​What is your assinged height?"​)) 
 +#height = vec(0, h ,0) 
 +height = vec(0, 25, 0) 
 +pivot = height + vec(0,​10,​0) 
 + 
 + 
 +# Create a ceiling, a person, a floor, the rocks and a spring. 
 +ceiling=box(size=vec(10,​2,​10),​ color=color.magenta) 
 +ceiling.pos = pivot + vec(0, ceiling.size.y/​2,​0) 
 + 
 +person=sphere(radius=2,​ velocity = vec(0,0,0), color=color.yellow) 
 +person.pos = height + vec(0,​person.radius,​0) 
 + 
 +floor=box(size=vec(10,​1,​10),​ color=color.magenta) 
 +floor.pos=vec(0,​person.pos.y-person.radius-(floor.size.y/​2),​0) 
 + 
 +rocks=box(pos=vec(0,​-1,​0),​ size=vec(10,​2,​10),​ color=color.gray(.5)) 
 + 
 +Spring=helix(pos=pivot,​ axis=person.pos-pivot,​ coils=10, radius=person.radius) 
 +lengthSpring = Spring.axis #initial length of the spring (fixed) 
 + 
 + 
 +# Define parameters 
 +mPerson = 70 
 +g = vec(0,​-9.81,​0) 
 +t=0 
 +tf = 20 
 +dt = 0.01 
 + 
 +#Use energy to determine the spring constant 
 +Egrav = abs(mPerson*g.y*height.y) 
 +kSpring = abs(2*Egrav/​(height.y**2)) 
 +#kSpring = 47 
 + 
 + 
 + 
 +#Create the force vectors 
 +FgravArrow = arrow(pos=person.pos,​ axis=vec(-2,​0,​0),​ color=color.red) 
 +FspringArrow = arrow(pos=person.pos+vec(2,​ 0, 0), color=color.blue) 
 +FnetArrow = arrow(pos=person.pos,​ axis=vec(0, 0, 0), color=color.black) 
 + 
 +#Energy graph showing kinetic energy (max at eq) and spring potential (0 at eq) 
 +energyGraph = graph(xtitle='​time (s)', ytitle='​energy (J)'​) 
 +KineticGraph = gcurve(color=color.green,​ label='​Kinetic'​) 
 +SpringGraph = gcurve(color=color.blue,​ label='​Spring Potential'​) 
 +GravGraph = gcurve(color=color.red,​ label='​Grav. Potential'​) 
 +TotalGraph= gcurve(color=color.black,​ label='​Total Energy'​) 
 + 
 + 
 + 
 +# Set up a disappearing floor for the trapdoor 
 +scene.pause('​Click to remove floor'​) 
 +floor.visible = False 
 + 
 + 
 +# Dropping the person once the floor is gone 
 +while t<tf: 
 +#while person.velocity.y <=0: 
 +  rate(200) 
 +   
 +  #Define the forces so they update as time goes on 
 +  Fgrav = mPerson * g 
 +  Fspring = -kSpring * (Spring.axis-lengthSpring) #Fspring = -k * delta x 
 +  Fnet = Fspring + Fgrav 
 + 
 +  # Movement - update the velocity of the person, the position of the person and the length of the spring 
 +  person.velocity = person.velocity + (Fnet/​mPerson)*dt 
 +  person.pos = person.pos + person.velocity*dt 
 +  Spring.axis = person.pos-pivot  
 +   
 +  # Change the person'​s color to red if they hit the rocks 
 +  if person.pos.y<​ (rocks.pos.y+.99+person.radius):​ 
 +    person.color=vec(1,​0,​0) 
 +   
 +  # Update the clock 
 +  t = t + dt 
 + 
 +  #Show the force vectors 
 +  FgravArrow.pos = person.pos+vec(-2,​0,​0) 
 +  FgravArrow.axis = Fgrav/​(1e2) 
 +  FspringArrow.pos = person.pos+vec(2,​ 0, 0) 
 +  FspringArrow.axis = Fspring/​(1e2) 
 +  FnetArrow.pos = person.pos 
 +  FnetArrow.axis = Fnet/​(1e2) 
 +   
 +  #Calculate the energies in each moment 
 +  KE=0.5*mPerson*mag(person.velocity)**2 
 +  SPE=0.5*kSpring*mag(Spring.axis-lengthSpring)**2 
 +  GPE=abs(mPerson*g.y*(person.pos.y-person.radius)) 
 +  TE=KE+SPE+GPE 
 + 
 +  #Graph the energies 
 +  KineticGraph.plot(t,​ KE) 
 +  SpringGraph.plot(t,​SPE) 
 +  GravGraph.plot(t,​GPE) 
 +  TotalGraph.plot(t,​TE) 
 + 
 +  
 +  
 +#Have the computer print the height of the person at the end of the program (won't happen until the while loop ends)   
 +#​print("​h =", (person.pos.y-person.radius)) 
 +#Compared to the rocks'​s surface 
 +#​print("​rocks = ", rocks.pos.y+1)
 </​code>​ </​code>​
 +
 +{{ :​repository:​bungeejump3.png?​nolink&​600 |}}
 +===Challenge Activity Code===
 +<code Python [enable_line_numbers="​true",​ highlight_lines_extra=""​]>​
 +GlowScript 2.7 VPython
 +# Set up display window
 +scene.width = 500
 +scene.height = 400
 +scene.background=color.white
 +scene.center = vec(0, 20, 0)
 +
 +#Some initial information
 +height = vec(0, 25, 0) #specifying the drop height
 +pivot = height + vec(0,6,0) #pivot is top of spring
 +
 +# Create a spring, a person, a ceiling, a floor and rocks
 +# origin is located on surface of the rocks
 +# The following statements define the shape, size and color of the person, ceiling, floor, and rocks
 +ceiling=box(size=vec(10,​2,​10),​ color=color.magenta)
 +ceiling.pos = pivot + vec(0, ceiling.size.y/​2,​0)
 +person=sphere(radius=2,​ velocity = vec(0,0,0), color=color.yellow)
 +person.pos = height + vec(0,​person.radius,​0)
 +floor=box(size=vec(10,​1,​10),​ color=color.magenta)
 +floor.pos=vec(0,​person.pos.y-person.radius-(floor.size.y/​2),​0)
 +rocks=box(pos=vec(0,​0,​0),​ size=vec(10,​2,​10),​ color=color.gray(.5))
 +Spring=helix(pos=pivot,​ axis=person.pos-pivot,​ coils=10, radius=2)
 +lengthSpring = Spring.axis #initial length of the spring (fixed)
 +
 +# Define parameters
 +#input mass of person
 +mPerson = 70
 +#g is acceleration due to gravity
 +g = vec(0,​-9.81,​0)
 +# t is time, tf is time final
 +#this statement initializes the time and defines the increment for the loop
 +t=0
 +tf = 20
 +dt = 0.01
 +
 +#Add code for Egrav= abs(mgh)
 +Egrav = abs(mPerson*g.y*height.y)
 +#Determine kSpring value or make an equation for kSpring in terms of Egrav and height
 +kSpring = abs(2*Egrav/​(height.y**2))
 +
 +#Energy graph showing kinetic energy (max at eq) and spring potential (0 at eq)
 +energyGraph = graph(xtitle='​time (s)', ytitle='​energy (J)')
 +KineticGraph = gcurve(color=color.green,​ label='​Kinetic'​)
 +SpringGraph = gcurve(color=color.blue,​ label='​Spring Potential'​)
 +GravGraph = gcurve(color=color.red,​ label='​Grav. Potential'​)
 +TotalGraph= gcurve(color=color.black,​ label='​Total Energy'​)
 +
 +#Show the force vector
 +FnetArrow = arrow(pos=person.pos,​ axis=vec(0, 0, 0), color=color.black)
 +
 +#Add a force vector for Fgrav and Fspring
 +#hint- off set the position of the arrows by adding or subtracting a vector
 +FgravArrow = arrow(pos=person.pos - vec(2,0,0), axis=vec(0, 0, 0), color=color.red)
 +FspringArrow = arrow(pos=person.pos + vec(2,0,0), axis=vec(0, 0, 0), color=color.blue)
 +
 +#​disappearing floor
 +scene.pause('​Click to remove floor'​)
 +floor.visible = False
 +
 +#Dropping the person
 +while True:
 +  rate(100)
 +  ​
 +  #Define the forces
 +  Fgrav = mPerson * g #F=mg
 +  Fspring = -kSpring * (Spring.axis-lengthSpring) #Fspring = -k * delta x
 +  Fnet = Fspring + Fgrav
 +
 +  #movement - update the velocity of the person, the position of the person and the length of the spring
 +  person.velocity = person.velocity + (Fnet/​mPerson)*dt
 +  person.pos = person.pos + person.velocity*dt
 +  Spring.axis = person.pos-pivot ​
 +  ​
 +  t = t + dt
 +    ​
 +   #​Input Energy Equations ​
 +  #KE hint- mag(   ) to make a vector a scalar
 +  #SPE hint- mag(   ) to make a vector a scalar
 +  #SPE hint- look at lines 37 and 85 to determine delta x
 +  #GPE hint- take absolute value, h of person
 +  #Total Energy
 +  ​
 +  KE=0.5*mPerson*mag(person.velocity)**2
 +  SPE=0.5*kSpring*mag(Spring.axis-lengthSpring)**2
 +  GPE=abs(mPerson*g.y*(person.pos.y-person.radius))
 +  TE=KE+SPE+GPE
 +  ​
 +  KineticGraph.plot(t,​ KE)
 +  SpringGraph.plot(t,​SPE)
 +  GravGraph.plot(t,​GPE)
 +  TotalGraph.plot(t,​TE)
 +  ​
 + #Net force arrow based on Fnet and scale factor
 +  FnetArrow.pos = person.pos
 +  FnetArrow.axis = Fnet/(1e2)
 +  ​
 + #​Force arrows for Fgrav and Fspring
 +  FgravArrow.pos = person.pos - vec(2,0,0)
 +  FgravArrow.axis = Fgrav/(1e2)
 +  FspringArrow.pos = person.pos + vec(2,0,0)
 +  FspringArrow.axis = Fspring/​(1e2)
 +
 + #Add if statement so the person'​s color changes when they hit the rocks
 +  if person.pos.y<​ (rocks.pos.y-person.radius):​
 +    person.color=vec(1,​0,​0)</​code>​
  
 ---- ----
 ====See Also==== ====See Also====
-  *+  *[[solar_system_springs | Solar System Springs]]
  • repository/bungee_jump.1605476094.txt.gz
  • Last modified: 2020/11/15 21:34
  • by porcaro1