This is an old revision of the document!
Ball Launch
Activity Description
Learning Goals
- Understand how the following effect motion of a projectile:
- Launch angle
- Launch velocity
- Free fall acceleration
- 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
Prior Knowledge Required
- 2-Dimensional kinematics
- Projectile motion
- Newton's 2nd Law
- Drag
Code Manipulation
- Interpretation of preexisting code
- Changing values of given code
Activity
Handout
Ball Launch
Part 1
Copy and paste the code from this 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.
- Variable 1:
- Variable 2:
- Variable 3:
- Now edit these variables and run the program until the ball successfully hits the target. Repeat twice more with different combinations of variables. Record your trials below:
Successful Attempt 1 | Successful Attempt 2 | Sucessful Attempt 3 | |
---|---|---|---|
Variable 1 | 1. | 1. | 1. |
Variable 2 | 2. | 2. | 2. |
Variable 3 | 3. | 3. | 3. |
Part 2 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 blue arrows represent? How do they change over time?
- How does changing the mass of the ball affect the motion of the ball and the size of the arrows?
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”.
- Describe how the motion is different now that drag is incorporated into the program
- How are the blue arrows different from the trials without drag?
- Now, with drag included, modify the variables until the ball hits the target again, and record your results in the table below:
Successful Attempt 4 | |
---|---|
Variable 1 | 1. |
Variable 2 | 2. |
Variable 3 | 3. |
Variable 4 (Drag) |
Code
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