Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
repository:satellite_orbit [2020/02/27 20:58] porcaro1 [Answer Key] |
repository:satellite_orbit [2020/02/27 21:05] porcaro1 |
||
---|---|---|---|
Line 200: | Line 200: | ||
- Evidence: This has already be thoroughly discussed in Part a of this problem | - Evidence: This has already be thoroughly discussed in Part a of this problem | ||
+ | ===Code=== | ||
+ | [[https://www.glowscript.org/#/user/nrosenmund/folder/Public/program/Newton'sLawOfGravitationandEnergyConservationTEACHER | Link]] | ||
+ | <code Python [enable_line_numbers="true", highlight_lines_extra="18,24,34,56,66,69"]> | ||
+ | GlowScript 2.7 VPython | ||
+ | get_library('https://rawgit.com/perlatmsu/physutil/master/js/physutil.js') | ||
+ | rom __future__ import division | ||
+ | from visual import * | ||
+ | from visual.graph import * | ||
+ | | ||
+ | #Window setup | ||
+ | scene.range = 7e7 | ||
+ | scene.width = 1024 | ||
+ | scene.height = 760 | ||
+ | |||
+ | #Objects | ||
+ | Earth = sphere(pos=vector(0,0,0), radius=6.4e6, texture=textures.earth) | ||
+ | Satellite = sphere(pos=vector(6.6*Earth.radius, 0,0), radius=1e6, color=color.orange, make_trail=True) | ||
+ | |||
+ | #Parameters and Initial Conditions | ||
+ | mSatellite = 1000 | ||
+ | pSatellite = vector(-1500*mSatellite,2598*mSatellite,0) | ||
+ | G = 6.67e-11 | ||
+ | mEarth = 5.98e24 | ||
+ | r = (Earth.pos - Satellite.pos) | ||
+ | g1 = gcurve(color=color.cyan,label="kinetic energy") | ||
+ | g2 = gcurve(color=color.red,label="gravitational energy") | ||
+ | g3 = gcurve(color=color.green,label="total mechanical energy") | ||
+ | |||
+ | #Time and time step | ||
+ | t = 0 | ||
+ | tf = 60*60*24*10 | ||
+ | dt = 1 | ||
+ | |||
+ | graphv = gdisplay(xmin=-0.25, xmax=1.25, ymin=-12e10, ymax=12e10, ytitle="Energy") | ||
+ | g4 = gvbars(gdisplay = graphv, color = color.red, delta = 0.2, label = "Kinetic Energy") | ||
+ | g5 = gvbars(gdisplay = graphv, color = color.blue, delta = 0.2, label = "Potential Energy") | ||
+ | g6 = gvbars(gdisplay = graphv, color = color.green, delta = 0.2, label = "Total Energy") | ||
+ | |||
+ | #MotionMap/Graph | ||
+ | FSatelliteMotionMap = MotionMap(Satellite, tf, 200, markerScale=4000, labelMarkerOrder=False) | ||
+ | pSatelliteMotionMap = MotionMap(Satellite, tf, 200, markerScale=0.2, markerColor=color.blue, labelMarkerOrder=False) | ||
+ | |||
+ | |||
+ | #Calculation Loop | ||
+ | ev = scene.waitfor('click') | ||
+ | while t < tf: | ||
+ | rate(6000) | ||
+ | g4.delete() | ||
+ | g5.delete() | ||
+ | g6.delete() | ||
+ | Fnet = vector(0,0,0) | ||
+ | r = (Earth.pos - Satellite.pos) | ||
+ | Fnet = vector(G*mEarth*mSatellite/(mag(r)**2)*(r/mag(r))) | ||
+ | pSatellite = pSatellite + Fnet*dt | ||
+ | Satellite.pos = Satellite.pos + (pSatellite/mSatellite)*dt | ||
+ | if mag(Satellite.pos) < Earth.radius: | ||
+ | text(text='You Crashed!!', pos=vec(0, 4e7, 0), color = color.red, depth=1, height= 7e6) | ||
+ | break | ||
+ | FSatelliteMotionMap.update(t, Fnet) | ||
+ | pSatelliteMotionMap.update(t, pSatellite) | ||
+ | t = t + dt | ||
+ | | ||
+ | KE = 1/2*mSatellite*mag(pSatellite/mSatellite)**2 | ||
+ | | ||
+ | PE = G*mSatellite*mEarth/mag(r) | ||
+ | | ||
+ | g1.plot(t, KE) | ||
+ | g2.plot(t, PE) | ||
+ | g3.plot(t, KE+PE) | ||
+ | g4.plot(0, KE) | ||
+ | g5.plot(0.5, PE) | ||
+ | g6.plot(1.0, KE+PE) | ||
+ | | ||
+ | #Earth Rotation (IGNORE) | ||
+ | theta = 7.29e-5*dt | ||
+ | Earth.rotate(angle=theta, axis=vector(0,0,1), origin=Earth.pos)</code> | ||
+ | | ||
+ | ---- | ||
+ | ====See Also=== | ||
+ |