Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
repository:inner_tube_river_crossing [2021/02/18 19:46] porcaro1 [Activity] |
repository:inner_tube_river_crossing [2021/02/18 19:54] (current) porcaro1 [Answer Key] |
||
|---|---|---|---|
| Line 152: | Line 152: | ||
| - They never appear because these prompts only show once the while loop is completed. Since the tube never crosses the river, the while loop never stops | - They never appear because these prompts only show once the while loop is completed. Since the tube never crosses the river, the while loop never stops | ||
| ===Code=== | ===Code=== | ||
| - | [[https://www.glowscript.org/#/user/jbennett/folder/Private/program/relativemotionstudentversion | Link]] | + | [[https://www.glowscript.org/#/user/porcaro1/folder/RepositoryPrograms/program/InnerTubeRiverCrossing-Solution | Link]] \\ |
| - | Note: No lines of code are added, only modified on a problem-to-problem basis, and these are what are highlighted below. | + | **Note**: No lines of code are added, only modified on a problem-to-problem basis, and these are what are highlighted below. |
| <code Python [enable_line_numbers="true", highlight_lines_extra="12,23,24,25,37"]> | <code Python [enable_line_numbers="true", highlight_lines_extra="12,23,24,25,37"]> | ||
| GlowScript 2.7 VPython | GlowScript 2.7 VPython | ||
| get_library('https://rawgit.com/perlatmsu/physutil/master/js/physutil.js') | get_library('https://rawgit.com/perlatmsu/physutil/master/js/physutil.js') | ||
| + | |||
| #Window setup | #Window setup | ||
| scene.range = 20 | scene.range = 20 | ||
| Line 163: | Line 163: | ||
| scene.height = 500 | scene.height = 500 | ||
| scene.background=vector(0,0.7,0.1) | scene.background=vector(0,0.7,0.1) | ||
| - | + | ||
| + | |||
| #Objects | #Objects | ||
| w=20 #the width of the river | w=20 #the width of the river | ||
| Line 174: | Line 174: | ||
| label(pos=vec(tube.pos.x,w/2,0), text='picnic site', color=color.black ) | label(pos=vec(tube.pos.x,w/2,0), text='picnic site', color=color.black ) | ||
| label(pos=vec(-10,-10,0), text='click to run', color=color.black ) | label(pos=vec(-10,-10,0), text='click to run', color=color.black ) | ||
| - | + | ||
| + | |||
| #Parameters and Initial Conditions | #Parameters and Initial Conditions | ||
| - | tubes=0 #the magnitude of the tube's velocity | + | tubes=2 #the magnitude of the tube's velocity |
| - | riverv = vector(0.5,0,0) #the velocity of the river | + | riverv = vector(-1.5,0,0) #the velocity of the river |
| degrees=0 #the launch angle with respect to the shore | degrees=0 #the launch angle with respect to the shore | ||
| theta=degrees*pi/180 | theta=degrees*pi/180 | ||
| Line 185: | Line 185: | ||
| tubev=vec(tubesx,tubesy,0) | tubev=vec(tubesx,tubesy,0) | ||
| scale=1.0 | scale=1.0 | ||
| - | + | ||
| - | + | ||
| + | |||
| #Time and time step | #Time and time step | ||
| t = 0 | t = 0 | ||
| tf = 3 | tf = 3 | ||
| dt = 0.01 #adjusts the smoothness of motion | dt = 0.01 #adjusts the smoothness of motion | ||
| + | |||
| tubeMotionMapx = MotionMap(tube, tf, 2, markerScale=scale, markerColor=color.blue, labelMarkerOrder=False) | tubeMotionMapx = MotionMap(tube, tf, 2, markerScale=scale, markerColor=color.blue, labelMarkerOrder=False) | ||
| tubeMotionMapy= MotionMap(tube, tf, 2, markerScale=scale, markerColer=color.red, labelMarkerOrder=False, ) | tubeMotionMapy= MotionMap(tube, tf, 2, markerScale=scale, markerColer=color.red, labelMarkerOrder=False, ) | ||
| tubeMotionMapr= MotionMap(tube, tf, 2, markerScale=scale, markerColor=color.green, labelMarkerOrder=False) | tubeMotionMapr= MotionMap(tube, tf, 2, markerScale=scale, markerColor=color.green, labelMarkerOrder=False) | ||
| + | |||
| ev = scene.waitfor('click') | ev = scene.waitfor('click') | ||
| + | |||
| #Calculation Loop | #Calculation Loop | ||
| while tube.pos.y<w/2: | while tube.pos.y<w/2: | ||
| Line 205: | Line 205: | ||
| tube.pos = tube.pos + tubev*dt | tube.pos = tube.pos + tubev*dt | ||
| tube.pos = tube.pos + riverv*dt | tube.pos = tube.pos + riverv*dt | ||
| + | |||
| #Set up motion map | #Set up motion map | ||
| relv = riverv + tubev | relv = riverv + tubev | ||
| Line 211: | Line 211: | ||
| tubeMotionMapx.update(t, tubev) | tubeMotionMapx.update(t, tubev) | ||
| tubeMotionMapy.update(t, riverv) | tubeMotionMapy.update(t, riverv) | ||
| - | + | ||
| + | |||
| t = t + dt | t = t + dt | ||
| - | | + | |
| #determine angle | #determine angle | ||
| angle=atan(mag(riverv)/mag(tubev))*(180/pi) | angle=atan(mag(riverv)/mag(tubev))*(180/pi) | ||
| + | |||
| #label | #label | ||
| print("time to cross =", t , "s") | print("time to cross =", t , "s") | ||