Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
repository:ball_launch [2020/02/18 01:43]
porcaro1
repository:ball_launch [2021/02/18 19:29] (current)
porcaro1
Line 7: Line 7:
     * Free fall acceleration     * Free fall acceleration
   * Use vectors to describe the motion of a block on a ramp and the forces acting upon it   * Use vectors to describe the motion of a block on a ramp and the forces acting upon it
-  * Apply Newton'​s 2nd Law to relate the acceleration of a block on a ramp to the forces acting on it+  * Apply Newton'​s 2nd Law to relate the acceleration of a block on a ramp to the forces acting on it ([[https://​www.nextgenscience.org/​pe/​hs-ps2-1-motion-and-stability-forces-and-interactions | HS-PS2-1]])
  
 ===Prior Knowledge Required=== ===Prior Knowledge Required===
Line 23: Line 23:
 ====Activity==== ====Activity====
 ===Handout=== ===Handout===
-==Ball Launch== +{{ :​repository:​ball_launch_1.png?​nolink&​600|}} 
-**Part 1** \\ +**Ball Launch** 
-Copy and paste the code from this [[http://​www.glowscript.org/#/​user/​donpata27/folder/Public/program/ProjectileMotionwithDrag ​| GlowScript program]]. Click the button to launch the ball. Your goal is to hit the target.+==Part 1== 
 +Copy and paste the code from this [[https://​www.glowscript.org/#/​user/​porcaro1/folder/RepositoryPrograms/program/BallLaunch-Incomplete ​| GlowScript program]]. Click the button to launch the ball. Your goal is to hit the target.
   - What 3 variables can you change that might enable the ball to hit the target? Ignore drag for right now.   - What 3 variables can you change that might enable the ball to hit the target? Ignore drag for right now.
     - Variable 1:     - Variable 1:
Line 37: Line 38:
 ^ Variable 3  | 3.                        | 3.                        | 3.                          |  ^ Variable 3  | 3.                        | 3.                        | 3.                          | 
  
-**Part 2**+==Part 2==  ​
 Answer the following questions that are related to the program and projectile motion. Answer the following questions that are related to the program and projectile motion.
   - What do the green arrows represent? How do they change over time?   - What do the green arrows represent? How do they change over time?
Line 43: Line 44:
   - How does changing the mass of the ball affect the motion of the ball and the size of the arrows?   - How does changing the mass of the ball affect the motion of the ball and the size of the arrows?
  
-**Part 3**+==Part 3==
 Extra: Within the code you’ll find a reference to the drag coefficient (line 27). Change the value to something between 0.01 and 0.001. Click to “Run this program”. Extra: Within the code you’ll find a reference to the drag coefficient (line 27). Change the value to something between 0.01 and 0.001. Click to “Run this program”.
   - Describe how the motion is different now that drag is incorporated into the program   - Describe how the motion is different now that drag is incorporated into the program
Line 53: Line 54:
 ^ Variable 2        | 2.                        | ^ Variable 2        | 2.                        |
 ^ Variable 3        | 3.                        |  ^ Variable 3        | 3.                        | 
-^ Variable 4 (Drag) |+^ Variable 4 (Drag) ​| 4.                        ​|
 ===Code=== ===Code===
-[[http://​www.glowscript.org/#/​user/​donpata27/folder/Public/program/ProjectileMotionwithDrag ​| Link]]+[[https://​www.glowscript.org/#/​user/​porcaro1/folder/RepositoryPrograms/program/BallLaunch-Incomplete ​| Link]]
 <code Python [enable_line_numbers="​true"​]>​ <code Python [enable_line_numbers="​true"​]>​
 GlowScript 2.7 VPython GlowScript 2.7 VPython
Line 64: Line 65:
 y = 0 y = 0
 ball = sphere(pos=vector(x,​y,​0),​ radius=10, color=vector(1,​0,​0),​ texture=textures.rough,​ make_trail=True) ball = sphere(pos=vector(x,​y,​0),​ radius=10, color=vector(1,​0,​0),​ texture=textures.rough,​ make_trail=True)
-ballmass = 10+ballmass = 1
  
 platform = box(pos=vector(0,​-25,​0),​ length=100, height=50, width=1, color=color.orange) platform = box(pos=vector(0,​-25,​0),​ length=100, height=50, width=1, color=color.orange)
Line 82: Line 83:
  
 #Parameters and Initial Conditions #Parameters and Initial Conditions
-g = vector(0,-8,0) #Free Fall acceleration +g = vector(0,-10,0) #Free Fall acceleration 
-b = 0.000  #Drag coefficient+b = 0  #Drag coefficient
  
  
Line 92: Line 93:
  
 #velocity #velocity
-v0 = 60 +v0 = 100 
-theta = 55+theta = 45
 vx = v0*cos(theta*pi/​180) vx = v0*cos(theta*pi/​180)
 vy = v0*sin(theta*pi/​180) vy = v0*sin(theta*pi/​180)
Line 121: Line 122:
     ​     ​
     Fgrav = ballmass*g     Fgrav = ballmass*g
-    ​Fdrag = -b*ballv*mag(ballv) +    Fnet = Fgrav
-    ​Fnet = Fgrav + Fdrag+
     ​     ​
     balla = Fnet/​ballmass     balla = Fnet/​ballmass
Line 132: Line 132:
     motionmapa.update(t,​ balla)     motionmapa.update(t,​ balla)
  
-    ​#rangecurve.plot(t,​ball.pos.x) +    rangecurve.plot(t,​ball.pos.x) 
-    ​#heightcurve.plot(t,​ball.pos.y)+    heightcurve.plot(t,​ball.pos.y)
     ​     ​
-    t = t + dt </​code>​+    t = t + dt 
 +     
 +print (x) 
 +print (y) 
 +print (vx) 
 +print (vy) 
 +print (t)</​code>​
  
 ---- ----
 ====Answer Key==== ====Answer Key====
 ===Handout=== ===Handout===
 +{{ :​repository:​ball_launch.png?​nolink&​600|}}
 +==Part 1==
 +  -The three variables:
 +    - Initial Speed (line 36)
 +    - Launch Angle (line 37)
 +    - Free Fall Acceleration (Line 26)
 +  - Possible results:
 +
 +|                                          ^ Successful Attempt 1      ^ Successful Attempt 2      ^ Successful Attempt 3   ^
 +^ Initial Speed (m/s)                      |       ​95 ​                 |       ​90 ​                 |       ​115 ​             |
 +^ Launch Angle (°)                         ​| ​      ​60 ​                 |       ​45 ​                 |       ​30 ​              |
 +^ Free Fall Acceleration (m/​s<​sup>​2</​sup>​) |       ​-10 ​                ​| ​      ​-10 ​                ​| ​     -14               ​| ​
 +
 +==Part 2==
 +  - The green arrows represent the velocity of the ball. They start out large, decrease in size, then get large again. They always point in the direction that is tangent to the path of the ball. This is consistent with the fact that the velocity of the ball slows down and then speeds up as it flies through the air
 +  - The blue arrows represent the acceleration of the ball. They stay the same size for the entire trip and always point downwards. This is consistent with the fact that the only force, and thus acceleration,​ acting on the ball is gravity
 +  - Changing the mass of the ball has no effect on the motion of the ball, nor the size of the arrows. This is because the acceleration stays the same; a heavier ball experiences a greater gravitational force, and the ratio between force and mass (which is the definition of acceleration) is always constant. The velocity is the same as dictated by the code, although in a real setting a heavier ball would have to be pushed harder to achieve the same velocity.
 +
 +==Part 3==
 +  - The ball will not fly as far. While the original flight path (sans drag) is a symmetrical parabola, the new flight path (with drag) starts relatively parabolic but becomes compressed or squished towards the end
 +  - The blue arrows now represent the acceleration caused but the combined effects of gravitational force and drag force (which points opposite the velocity vector). In the first half of the launch, both drag and gravity have downward components creating a large resultant acceleration vector, while in the second half, the drag force points mostly up, thereby summing to a smaller resultant acceleration vector.
 +  - Possible results:
 +
 +|                                         ^ Successful Attempt 4      ^
 +^ Launch Speed (m/s)                      |          120              |
 +^ Launch Angle (°)                        |          50               |
 +^ Free Fall Acceleration (m/​s<​sup>​2</​sup>​)| ​         -10              | 
 +^ Drag Coefficient (-)                    |          0.008            |
  
 ===Code=== ===Code===
 +[[https://​www.glowscript.org/#/​user/​porcaro1/​folder/​RepositoryPrograms/​program/​BallLaunch-Solution | Link]]
 +<code Python [enable_line_numbers="​true",​ highlight_lines_extra="​65"​]>​
 +GlowScript 2.7 VPython
 +get_library('​https://​rawgit.com/​perlatmsu/​physutil/​master/​js/​physutil.js'​)
  
 +#objects
 +x = 0
 +y = 0
 +ball = sphere(pos=vector(x,​y,​0),​ radius=10, color=vector(1,​0,​0),​ texture=textures.rough,​ make_trail=True)
 +ballmass = 10
 +
 +platform = box(pos=vector(0,​-25,​0),​ length=100, height=50, width=1, color=color.orange)
 +pL = label(pos=vector(0,​200,​0),​ text='​Click to Launch',​ space=30, height=16, border=4, font='​sans'​)
 +
 +target = box(pos=vector(800,​-25,​0),​ length=100, height=50, width=1, color=vector(0.8,​0.8,​0))
 +tL = label(pos=vector(800,​-75,​0),​ text='​Target',​ space=30, height=16, border=4, font='​sans'​)
 +
 +
 +
 +#Window setup
 +scene.range = 480
 +scene.center = vector(400,​100,​0)
 +scene.width = 960
 +scene.height = 600
 +scene.background = vector(0.5,​0.5,​0.5)
 +
 +#Parameters and Initial Conditions
 +g = vector(0,​-8,​0) #Free Fall acceleration
 +b = 0.000  #Drag coefficient
 +
 +
 +#Time and time step
 +t = 0
 +tf = 10
 +dt = 0.01
 +
 +#velocity
 +v0 = 60
 +theta = 55
 +vx = v0*cos(theta*pi/​180)
 +vy = v0*sin(theta*pi/​180)
 +ballv = vector(vx,​vy,​0)
 +
 +#motion map
 +motionmapv = MotionMap(ball,​ tf, 5, markerScale=.8,​ markerColor=color.green,​ labelMarkerOrder=False)
 +motionmapa = MotionMap(ball,​ tf, 5, markerScale=6,​ markerColor=color.blue,​ labelMarkerOrder=False)
 +
 +#graph
 +gd = graph(width=600,​ height=250, title='<​b>​Horizontal Range vs. Time</​b>', ​
 +    xtitle='<​i>​time</​i>',​ ytitle='<​i>​Horizontal Range</​i>', ​
 +    foreground=color.black,​ background=color.white, ​
 +    xmin=0, xmax=15, ymin=0, ymax=1000)
 +rangecurve = gcurve(color=color.red)
 +
 +gd = graph(width=600,​ height=250, title='<​b>​Height vs. Time</​b>', ​
 +    xtitle='<​i>​time</​i>',​ ytitle='<​i>​Height</​i>', ​
 +    foreground=color.black,​ background=color.white, ​
 +    xmin=0, xmax=15, ymin=0, ymax=1000)
 +heightcurve = gcurve(color=color.green)
 +
 +ev = scene.waitfor('​click'​)
 +
 +while ball.pos.y >= 0:
 +    rate(500)
 +    ​
 +    Fgrav = ballmass*g
 +    Fdrag = -b*ballv*mag(ballv)
 +    Fnet = Fgrav + Fdrag
 +    ​
 +    balla = Fnet/​ballmass
 +        ​
 +    ball.pos = ball.pos + ballv*dt
 +    ballv = ballv + balla*dt
 +    ​
 +    motionmapv.update(t,​ ballv)
 +    motionmapa.update(t,​ balla)
 +
 +    rangecurve.plot(t,​ball.pos.x)
 +    heightcurve.plot(t,​ball.pos.y)
 +    ​
 +    t = t + dt
 +    ​
 +print (x)
 +print (y)
 +print (vx)
 +print (vy)
 +print (t)</​code>​
 ---- ----
 ====See Also=== ====See Also===
-[[block_on_a_ramp ​Block on a Ramp]]+  *[[cirque_du_soleil_stunt ​Cirque du Soleil Stunt]] 
 +  *[[angry_birds | Angry Birds]]
  • repository/ball_launch.1581990209.txt.gz
  • Last modified: 2020/02/18 01:43
  • by porcaro1