course_planning:183_projects:s23_week_3_geostationary_orbit

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revisionBoth sides next revision
course_planning:183_projects:s23_week_3_geostationary_orbit [2023/01/25 19:09] hallsteincourse_planning:183_projects:s23_week_3_geostationary_orbit [2023/01/25 19:34] hallstein
Line 282: Line 282:
     Earth.rotate(angle=theta, axis=vector(0,0,1), origin=Earth.pos)     Earth.rotate(angle=theta, axis=vector(0,0,1), origin=Earth.pos)
 </code> </code>
 +
 +Changes made to the given code:
  
 ====== Project 3: Part C: Geostationary orbit ====== ====== Project 3: Part C: Geostationary orbit ======
Line 293: Line 295:
 Inside the while loop, add: graphExample.plot(t, mEarth) Inside the while loop, add: graphExample.plot(t, mEarth)
  
 +====== Project 3: Part D: Geostationary orbit ======
 +
 +On a single graph, plot both the x-component of the satellite's momentum and the x-component of the net force acting on the satellite.
 +
 +
 +Solution code for parts C and D
 +
 +<code>
 +GlowScript 2.9 VPython
 + 
 +get_library('https://cdn.rawgit.com/PERLMSU/physutil/master/js/physutil.js')
 + 
 +#Window setup
 +scene.range=7e7
 +scene.width = 1024
 +scene.height = 760
 + 
 +#Objects
 +Earth = sphere(pos=vector(0,0,0), radius=6.4e6, color=color.blue)
 +Satellite = sphere(pos=vector(42164e3, 0,0), radius=1e6, color=color.red, make_trail=True)   #modify position of satellite
 + 
 +#Parameters and Initial Conditions
 +mSatellite = 15e3   # edit mass of the satellite
 +pSatellite = mSatellite*vector(0,3073,0) #edit momentum of the satellite
 +G = 6.67e-11   # add universal gravitational constant
 +mEarth = 5.97e24  # add mass of Earth
 + 
 +#Time and time step
 +t = 0
 +tf = 60*60*24
 +dt = 1
 + 
 +#MotionMap/Graph
 +SatelliteMotionMap = MotionMap(Satellite, tf, 20, markerScale=2000, labelMarkerOrder=False)
 +FnetMotionMap = MotionMap(Satellite, tf, 20, markerScale=2000, labelMarkerOrder=False)   # add Fnet force arrows - also need to add in loop)
 +#separationGraph = PhysGraph(numPlots=1)
 +graphSatellite = PhysGraph(numPlot=1)
 +graphFnet = PhysGraph(numPlots=1)
 +
 +graphpF = PhysGraph(numPlots=2)
 +
 + 
 + 
 +#Calculation Loop
 +while t < tf:
 +    rate(10000)
 + 
 +    Fgrav = -G*mSatellite*mEarth*Satellite.pos/(mag(Satellite.pos)**3) # Add Fgrav change Fnet
 +    Fnet = Fgrav                                                       # change Fnet from zero
 + 
 +    pSatellite = pSatellite + Fnet*dt
 +    Satellite.pos = Satellite.pos + (pSatellite/mSatellite)*dt
 + 
 +    SatelliteMotionMap.update(t, pSatellite/mSatellite)
 + 
 +    FnetMotionMap.update(t, Fnet)  # Add Fnet vector arrows
 +    #separationGraph.plot(t,mag(mSatellite))
 +    graphSatellite.plot(t,mag(Satellite.pos))
 +    graphFnet.plot(t,mag(Fnet))
 +    scale=1.0E4   # add scale to make fluctuations in Fx visible (units of 10^-4 N)
 +    graphpF.plot(t,pSatellite.x,scale*Fnet.x)
 + 
 +    t = t + dt
 + 
 +    #Earth Rotation (IGNORE)
 +    theta = 7.29e-5*dt
 +    Earth.rotate(angle=theta, axis=vector(0,0,1), origin=Earth.pos)
 +</code>
  
 +Modification of solution to part B to get |r| vs t, |Fnet| vs t and Fnet,x and P,x vs t:
  
  
  • course_planning/183_projects/s23_week_3_geostationary_orbit.txt
  • Last modified: 2023/10/18 01:20
  • by hallstein