This is an old revision of the document!
Block on a Ramp
Activity Description
Learning Goals
- Interpret and edit the code of a computer model of a block sliding down a ramp
- 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
- Newton's 2nd Law
- Friction
- Coefficient of friction $\mu$
Code Manipulation
- Interpretation of preexisting code
- Changing values of given code
- Creation of new lines of code
Activity
Handout
Block on a Ramp
Part 1
- What is the angle of the ramp?
- What else can you change about the ramp?
- What is the distance along the ramp that the block will travel?
- What is the while loop used for?
- What are the components of the net force vector?
- What are the components of the acceleration vector for the block? Where does the acceleration of the block show up within the code?
Part 2
- What happens to the net force as the block slides down the ramp? How do you know?
- What happens if you increase the angle of the ramp? Why does that happen?
- What happens to the motion of the block if you increase the mass? How can you be sure?
Part 3
- Modify the code so that the ramp now has a coefficient of friction equal to 0.3
- Create and label an arrow to represent the frictional force acting on the block
Code
GlowScript 2.7 VPython #Call the library for Motion Map get_library('https://rawgit.com/perlatmsu/physutil/master/js/physutil.js') #Window setup scene.range = 15 scene.background = vector(1, 1, 0.8) #the values below can be adjusted to change the properties of the ramp ramp_angle = 23 * pi/180 ramp_depth = 6 ramp_width = 30 ramp_position = vec(-15, -10, 0) #the code below draws the ramp (lines 17 - 45) ramp_color = color.gray(0.3) edge_thickness = 0.05 edge_color = color.black a = vertex(pos=vec(0, 0, 0)+ramp_position, color=ramp_color, opacity=.5) b = vertex(pos=vec(0, 0, ramp_depth)+ramp_position, color=ramp_color, opacity=.5) c = vertex(pos=vec(ramp_width, 0, 0)+ramp_position, color=ramp_color, opacity=.5) d = vertex(pos=vec(ramp_width, 0, ramp_depth)+ramp_position, color=ramp_color, opacity=.5) e = vertex(pos=vec(0, ramp_width * tan(ramp_angle), 0)+ramp_position, color=ramp_color, opacity=.5) f = vertex(pos=vec(0, ramp_width * tan(ramp_angle), ramp_depth)+ramp_position, color=ramp_color, opacity=.5) ramp_base = quad(v0=a, v1=b, v2=d, v3=c) ramp_surface = quad(v0=e, v1=f, v2=d, v3=c) ramp_back = quad(v0=e, v1=f, v2=b, v3=a) ramp_side_near = triangle(vs=[a, c, e]) ramp_side_far = triangle(vs=[b, d, f]) def edge(v1, v2, r): cylinder(pos = v1.pos, axis = v2.pos-v1.pos, radius = r, color = edge_color) ab = edge(a, b, edge_thickness) ac = edge(a, c, edge_thickness) bd = edge(b, d, edge_thickness) cd = edge(c, d, edge_thickness) ae = edge(a, e, edge_thickness) bf = edge(b, f, edge_thickness) ef = edge(e, f, edge_thickness) df = edge(d, f, edge_thickness) ec = edge(e, c, edge_thickness) #The values below can be changed to modify the dimensions of the block block_width = 3 block_height = 3 block_depth = 3 #Create the block on the ramp block = box( pos=vector(0.5*(block_width**2+block_height**2)**0.5 * cos(atan(block_height/block_width) - ramp_angle), ramp_width * tan(ramp_angle) + 0.5*(block_width**2+block_height**2)**0.5 * sin(atan(block_height/block_width) - ramp_angle), 0.5*ramp_depth) + ramp_position, axis=vector(ramp_width, -ramp_width * tan(ramp_angle), 0), size=vector(block_width,block_height,block_depth), color = vector(0.65, 0.15, 0.15), texture = textures.wood_old, opacity = 0.7) #Set up the physical properties like the mass and velocity of the block, the acceleration due to gravity, and time. mblock = 50 vblock = vector(0, 0, 0) g = vector(0,-9.8,0) t = 0 tf = 5 dt = .001 #Define the force vectors acting on the block Fgrav = mblock * g Fnorm = vector(mag(Fgrav) * cos(ramp_angle)*sin(ramp_angle), mag(Fgrav)*cos(ramp_angle)*cos(ramp_angle), 0) Fnet = Fgrav + Fnorm #Create arrows to show the forces with labels FgravArrow = arrow(pos = block.pos, axis=Fgrav/mblock, shaftwidth=0.3, color = color.green) FnormArrow = arrow(pos = block.pos, axis=Fnorm/mblock, shaftwidth=0.3, color = color.green) FgravLabel = label(pos=FgravArrow.pos, text='Fg', xoffset=-20, yoffset=-50, space=30, height=16, border=4, font='sans', line=False, color = color.black) FnormLabel = label(pos=FnormArrow.pos, text='Fn', xoffset=20, yoffset=50, space=30, height=16, border=4, font='sans', line=False, color = color.black) #Slide the block down the ramp while block.pos.y > ( ramp_position.y+ 0.5*(block_width**2+block_height**2)**0.5 * cos(atan(block_width/block_height) - ramp_angle) ): rate(500) block.pos = block.pos + vblock*dt + 0.5*(Fnet/mblock)*dt**2 FgravArrow.pos = FgravArrow.pos + vblock*dt + 0.5*(Fnet/mblock)*dt**2 FnormArrow.pos = FnormArrow.pos + vblock*dt + 0.5*(Fnet/mblock)*dt**2 FgravLabel.pos = FgravLabel.pos + vblock*dt + 0.5*(Fnet/mblock)*dt**2 FnormLabel.pos = FnormLabel.pos + vblock*dt + 0.5*(Fnet/mblock)*dt**2 vblock = vblock + (Fnet/mblock)*dt t = t + dt